デバイスを毎日再起動する cron ジョブを設定しようとしています。何らかの理由で再起動がハングした場合は、SysRq リセットへの安全なコールバックを使用します (問題は、SSH が強制終了され、デバイスが再起動しないためデバイスが失われ、再起動にコストのかかる人的介入が必要になることです)。
しばらくの間動作していたスクリプト:
5 5 * * * root /sbin/reboot -f; sleep 30; /bin/echo `date -u +'\%Y-\%m-\%dT\%H:\%M:\%SZ'` >> /var/log/player-reboot.error.log; echo 1 > /proc/sys/kernel/sysrq; sync; echo b > /proc/sysrq-trigger
ただし、これはかなり過酷なものであり (ハードリブート -f)、一部のデバイスは最近回復しませんでした (毎日数千台以上)。
何がハングしているのかわかりません (ファイルが書き込まれていないように見えるので、再起動自体か echo のどちらかがハングしていると思います)。
アンパサンド & を使用して「ロック」しないようにし、最終的に適切なリセットが行われるようにしようとしましたが、まったく機能しないようです (再起動は不要です)。
5 5 * * * root /sbin/shutdown -r +2 &; sleep 240; /bin/echo `date -u +'\%Y-\%m-\%dT\%H:\%M:\%SZ'` >> /var/log/player-reboot.error.log &; echo 1 > /proc/sys/kernel/sysrq; sleep 1; echo b > /proc/sysrq-trigger
cron スクリプトでアンパサンドを使用できますか? 望ましい結果を達成するための別のよりスマートな方法をご存知ですか? ありがとうございます!