ユーザーが接続状態を継続的に監視し、問題が発生した場合に対処するためにwhile do
使用できるbashスクリプトがあります。sleep
保護されていない唯一のことは、スクリプト自体の実行を確認することです。
myscript.sh
起動時にinit.dエントリを実行してから1分ごとにCRONジョブを実行し、起動時に自動的に実行したスクリプトがまだ実行されていることを確認したいと思います。この目標をどのように達成できますか?
答え1
最新のinitシステム(systemdやupstartなど)を使用すると、スクリプトが失敗した場合にinitシステムにスクリプトを再起動させることができます。
何らかの理由で古いシステムが利用できない場合は、スクリプトが定期的にフラグファイルを更新するように指示し、(touch /var/lib/myapp/flagfile
)cronを使用してフラグファイルが特定の時間(秒)より古いことを確認し、必要に応じてスクリプトを再起動できます。それは次のとおりです。
# get current time (in seconds since the epoch)
now=$(date +%s)
# get flag file mtime (in seconds since the epoch)
last_update=$(stat --printf '%Y' /var/lib/myapp/flagfile)
if [ $(( now - last_update )) -gt $interval ]; then
restart_script_here
fi
システムを使う
システムが利用可能な場合は、.service. unit with the
Restart = always key, which instructs systemd to restart the script whenever it fails. E.g., put something like this in
/etc/systemd/system/myscript.service`を作成してください。
[Unit]
Description=This is my nifty service.
# Put any dependencies here
[Service]
Type=simple
ExecStart=/path/to/myscript
Restart=always
[Install]
WantedBy=multi-user.target
次に、次を使用して有効にします。
# systemctl enable myscript
# systemctl start myscript
スケジュールされたジョブの使用
永続スクリプトを実行するのではなく、通常のcronジョブを実行して必要なチェックおよび修正操作を実行できます。 1分間に1回だけチェックするように制限されていますが、その頻度が許容可能な場合、これはより簡単な解決策です。