毎日再起動するCronjob

毎日再起動するCronjob

毎日05:00にサーバーを再起動したいので、このcronjobを設定しました。

# file: /etc/cron.d/reboot
* 5 * * * root reboot &> /dev/null

SSH接続から追い出されて最初は効果があったと思います。ところが数日後にまた探してみると、次のような内容がありました。

$ uptime
07:12:13 up 7 days

7日間再開されなかったことを意味しますか?何が問題なの?

答え1

他のコメント者が言ったように、uptime7日の稼働時間が報告されたら、その間システムは再起動されませんでした。

@ Dennisさんの正しいコメントに加えて、一時的にパイプを削除した/dev/null後、rootメールと/var/log/syslog

rebootコマンドが実行中のシェルにない場合、cronはコマンドをPATHまったく見つけることができない可能性があります。

一部のシステムにはこのコマンドがないため、reboot使用する必要がありますshutdown -r now

答え2

stderrとstdoutをリダイレクトする構文はbashで機能しますが、&>コマンドを実行するためにbashでは機能しない可能性があります。/bin/shcron

この試み:

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を設定するには、crontabroot(またはジョブ仕様の設定に使用されるすべてのコマンド)でコマンドを実行する必要があります。

関連情報