cronでawsコマンドが実行されない問題
問題
22時にインスタンス停止コマンドを打つように設定
0 22 * * * aws ec2 stop-instances --region=ap-northeast-1 --instance-ids=i-xxxx
時間が過ぎた後にawsコンソールから確認してもインスタンスが起動したまま。。
確認
普通に上記のコマンドを打った時にインスタンスが停止するか確認
$ aws ec2 stop-instances --region=ap-northeast-1 --instance-ids=i-xxxx { "StoppingInstances": [ { "InstanceId": "i-xxxx", "CurrentState": { "Code": 64, "Name": "stopping" }, "PreviousState": { "Code": 16, "Name": "running" } } ] }
結果:awsコンソールを確認するとインスタンスが停止している
cronのログを確認
$ tail -f /var/log/cron Jul 11 00:01:22 ip-10-0-0-11 CROND[18896]: (centos) CMD (aws ec2 stop-instances --region=ap-northeast-1 --instance-ids=i-xxxx)
結果:cronさんはコマンドを叩いてくれてはいる
でも、/var/log/cron
には実行ログしか書き込まれず、エラーがあってもここには出てこないらしい
エラーログを吐き出してみる
$ crontab -e 0 22 * * * aws ec2 stop-instances --region=ap-northeast-1 --instance-ids=xxxx > cron-error.log 2>&1 $ cat cron-error.log /bin/sh: aws: command not found
結果:どうやらコマンドのパスが合ってなくてこけてるらしい
解決
awsコマンドのパスを確認する
$ which aws ~/.local/bin/aws
コマンドのフルパスを指定する
$ crontab -e 0 22 * * * ~/.local/bin/aws ec2 stop-instances --region=ap-northeast-1 --instance-ids=xxxx
インスタンスを確認すると停止してる!