【CentOS7】CRONでスクリプトが実行出来ない時に確認したい項目

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

Linuxでスクリプトを定期実行させたい場合、選択肢として真っ先に挙がるのがcronです。
手動で実行するとスクリプト実行出来るのにcronだと実行されない!ってのはよくある話です。
そんなときは以下の項目を確認してみてください。

【CentOS7】CRONでスクリプトが実行出来ない時に確認したい項目

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

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

# 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 -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 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が動かない時の参考にしてください。

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

こちらの記事もおすすめ!

コメントを残す

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

*

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

ABOUTこの記事をかいた人

あいしんくいっとの中の人。




少しでも人の役に立つ記事書くことをモットーにブログ運営しています。

しょうもない記事も多いけど、たまには役立つことが書けると良いかなー。
気軽に楽しんでいってください。


聞きたいことがあれば、気軽にツイートください♪可能な範囲でお答えします。

follow us in feedly