毎日05:00にサーバーを再起動したいので、このcronjobを設定しました。
# file: /etc/cron.d/reboot
* 5 * * * root reboot &> /dev/null
SSH接続から追い出されて最初は効果があったと思います。ところが数日後にまた探してみると、次のような内容がありました。
$ uptime
07:12:13 up 7 days
7日間再開されなかったことを意味しますか?何が問題なの?
答え1
他のコメント者が言ったように、uptime
7日の稼働時間が報告されたら、その間システムは再起動されませんでした。
@ Dennisさんの正しいコメントに加えて、一時的にパイプを削除した/dev/null
後、root
メールと/var/log/syslog
。
reboot
コマンドが実行中のシェルにない場合、cronはコマンドをPATH
まったく見つけることができない可能性があります。
一部のシステムにはこのコマンドがないため、reboot
使用する必要がありますshutdown -r now
。
答え2
stderrとstdoutをリダイレクトする構文はbashで機能しますが、&>
コマンドを実行するためにbashでは機能しない可能性があります。/bin/sh
cron
この試み:
0 5 * * * root reboot > /dev/null 2>&1
これは、Dennis Kaarsemakerのコメントで指摘されたタイミングエラーも修正します。
(もともとこれが良い考えなのかについては言及しません。)
答え3
私が提供できる最善の答えは、ボックスに何が問題なのか、再起動に時間がかかるのがわかるシステム管理者を見つけることです。 「問題」に対する他のすべての可能な解決策(例:検証、絶対パスの$PATH
使用、またはreboot
使用shutdown -r
)は、cronjobを機能させるための解決策ですが、実際の問題については暗闇に陥ります。
答え4
インストールされているマニュアルページを確認してくださいcron
。実装に応じてさまざまなタスクを実行できます。たとえば、必要な操作(not PATH
、結果reboot
が見つかりません)を実行する前に特定の変数のみを設定するなどの操作を実行できます。
時間定義の最初のアスタリスクが正しくないことに加えて、「ルート」文字列が正しくないと思います。ファイルは次のようにする必要があります。
# file: /etc/cron.d/reboot
0 5 * * * reboot &> /dev/null
root
それ以外の場合は、引数を使用して呼び出しを試みるため失敗しますreboot
。ルートのcrontabを設定するには、crontab
root(またはジョブ仕様の設定に使用されるすべてのコマンド)でコマンドを実行する必要があります。