❄︎
Amazonでクリスマスギフトを贈ろう!

LinuxでCRONでスクリプトが動かない!そんな時に確認したい項目

ども。あいしんくいっと(@ithinkitnet)です。

Linuxでスクリプトを定期実行させたい場合、選択肢として真っ先に挙がるのがcronです。
Windowsでいうタスクスケジューラ的な使い方が出来て大変便利です。
そんな手軽に使えて便利なcronなのですが、手動実行するとスクリプト実行出来るのにcronだと実行されない!ってのはよくある話です。
そんなときは以下の項目を確認してみてください。

LinuxでCRONでスクリプトが動かない!そんな時に確認したい項目

cronに登録したはずなのに何故かスクリプトが実行されない!
そんな時は以下の項目を確認してみてください。

cronの記載方法に間違いがないか

cronの記載なんて間違える訳ないだろう!って思ってても意外に間違えるものです。
手動だとスクリプト実行出来るのにcronだとスクリプトが動かない時はもう一度見直してみましょう。

crontab
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed

cronサービスは起動しているか

crondはデフォルトで起動しているので停止していることはないと思いますが、念のために確認しておきましょう。

Cent6系コマンド
# service crond status
crond (pid  8860) を実行中...
Cent7系)コマンド
# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since 土 2017-02-11 23:48:18 JST; 2 months 3 days ago
もし、動いていなければ自動起動するように設定しておきましょう。

実行権はついているか

実行対象となるスクリプトに実行権限が付与されているか確認しましょう。

lsコマンド
# ls -l test.sh
-rwxr-xr-x 1 root root 92  4月 17 11:06 2017 test.sh
権限に「x」がない場合は「chmod +x」するなりして権限を付与しましょう。

スクリプトパスは間違いないか

これもやりがちなパターン。
CRONで実行したいスクリプトパスが間違えていることもたまにあります。
ホントに間違いないか、再度見直しましょう。

cronログ見ても普通に実行されているかのようにログ出力されてしまうのが何とも・・・。

Apr 08 13:02:01 logsrv CROND[25294]: (root) CMD (/scrip/test.sh > /dev/null 2>&1)

気を付けましょう。

SSH接続が可能か

個人的によくやるのが、スクリプト内でSSH接続を行っている場合、SSH接続の初回ログイン確認で止まっているケース。
テスト環境と本番環境でそれぞれ別のサーバで検証するため、テスト環境では良くても本番では駄目といったことになりかねない。。。

ssh接続
# ssh admin@192.168.11.100
The authenticity of host '192.168.11.100 (192.168.11.100)' can't be established.
RSA key fingerprint is 0a:55:ef:0c:92:9c:ba:47:19:31:ac:fe:b4:77:da:db.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.11.100' (RSA) to the list of known hosts.

事前にSSH接続出来ることぐらいは確認はしておきましょう・・・。

expectコマンド入りのスクリプト

ちょっとマニアックな感じですが、参考まで。

expectコマンドを使ったスクリプトをCRONで動かそうとすると動かなかった。
ターミナルで手動実行すると問題なく動作する。

原因は「interact」だった。
以下のようにスクリプトを修正することで無事に動くようになりました。

修正前)


interact
"


修正後)


send ¥"exit¥n¥"
expect ¥"~];¥"
expect eof
exit
"

では、最後にまとめ。

cronでスクリプトが動かない時に確認したい項目

  1. cronの記載方法に間違いがないか
  2. cronサービスは起動しているか
  3. 実行権はついているか

  4. スクリプトパスは間違いないか

  5. SSH接続が可能か

  6. expectコマンド入りのスクリプト

どうですか。
cronが動かない時の参考にしてください。

以上、あいしんくいっとでした(‘◇’)ゞ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)