ルートcronジョブをセットアップして、ルートとしてBashスクリプトを実行し、毎時、毎月、毎月、7分37分に実行しようとしました。このスクリプトはにあり/usr/bin
、名前が付けられていtunlrupdate.sh
ます。TunlrのDNSを更新します。
$ ls -l /usr/bin/tunlrupdate.sh
-rwxr-xr-x 1 root root 2133 Sep 24 15:42 /usr/bin/tunlrupdate.sh
呼び出されると、スクリプトは何が起こっているかを以下にあるログに書き込みます。 /var/log/tunlr.log
このルートcronジョブを追加するには、ルートのcrontabの標準を使用しました
sudo crontab -e
そして、これらの2行を最後に挿入しました。cronがスクリプトをルートとして実行することを期待しています。
# check for updated Tunlr DNS every 30 minutes at the hour + 7 mn and hour + 37 mn
07,37 * * * * root /usr/bin/tunlrupdate.sh
後のコマンドsudo crontab -l
で、cronジョブが挿入されたことを確認しました。
Ubuntuを再起動し、cronジョブが適切に起動されたかどうかをログファイルでチェックしていました。ただし、ログファイルには何もありません/var/log/tunlr.log
。これは、ジョブが正常に起動されなかったことを意味します。
コマンドラインからスクリプトを実行する場合、私はそれをチェックしました
sudo /usr/bin/tunlrupdate.sh
その後、ログファイルはそれに応じて更新されます。
システムでこのcronジョブが計画どおりに実行されないのはなぜですか?
更新1:これまでに提案されたすべてのソリューションは機能しません。システムログを一覧表示するCLIのOlliに感謝しますsudo grep CRON /var/log/syslog
。ただし、CRONエラーが発生しました
CRON[13092]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ]
&& find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php
/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
推奨されるPATH =を挿入し、スクリプト内の関数にルートからの絶対パスを使用するか、ここでこの推奨される解決策を使用しないでください。まだこのエラーが発生します。
いくつかの検索の後、ここ/usr/lib/php5/maxlifetime
で説明されているように、ファイル内のエラーを特定しました:Change #!/bin/sh -e --> #!/bin/sh -x
次に、システムのCRONエラーログを一覧表示します
sudo grep CRON /var/log/syslog
Feb 11 18:07:01 Marius-PC CRON[14067]: (root) CMD (root /usr/bin/tunlrupdate.sh)
Feb 11 18:07:01 Marius-PC CRON[14066]: (root) MAIL (mailed 1 byte of output; but got
status 0x00ff, #012)
まだbashスクリプトを実行できません。今回はエラーがログに表示されません。確実にするために、これはスクリプトの内容ではありませんでした。スクリプトを次の3行に減らしました。
#!/bin/bash
LOGFILE=/var/log/tunlr.log
echo $LOGFILE >> $LOGFILE
まだcronジョブを取得できません。ログファイルには何も書き込まれません。空のスクリプトでもcronで実行されない場合がありますか?わかりません。次の2行に縮小したスクリプトを試してみました。
#!/bin/bash
exit 0
それでも同じエラーログ。cronスクリプトが通過しません...