回答:
timeout
コマンドで実行できます、
timeout - run a command with a time limit
Synopsis
timeout [OPTION] NUMBER[SUFFIX] COMMAND [ARG]...
timeout [OPTION]
Description
Start COMMAND, and kill it if still running after NUMBER seconds. SUFFIX may be 's' for seconds (the default), 'm' for minutes, 'h' for hours or 'd' for days.
PS。同期プロセスに時間がかかりすぎる場合は、データを同期するための別の方法を検討してください。レプリケーションをブロックすることもできます。
休止状態が17時間続いても簡単に同期を続行できる場合は、試してください
0 0 * * * killall -CONT -g sync.sh || /usr/local/bin/sync.sh
7 0 * * * killall -STOP -g sync.sh
同期が最初からやり直したい場合は、試してください
0 0 * * * exec /usr/local/bin/sync.sh
7 0 * * * killall -TERM -g sync.sh
同期またはそのサブタスクが信号を無視するが残骸を残さない場合、それを行います
0 0 * * * exec /usr/local/bin/sync.sh
7 0 * * * killall -KILL -g sync.sh
killall
∈ psmiscの
0 0 * * * timeout 7h /usr/local/bin/sync.sh
か、ほぼ同等のkillall -TERM
バリアントになります。
また、cronを使用して、指定された時間にそのサービスまたはスクリプトを「停止」または「強制終了」します。
まず、cronジョブを作成して、ジョブまたはスクリプトを実行します。(名前を持つジョブを強制終了する別のcronを簡単に実行できます
sudo pkill wget
)
次に、次の出力で、便利で読みやすい形式で実行中のcrontabタスクを確認します。
ps -o pid,sess,cmd afx | egrep "( |/)cron( -f)?$"
これらは、最初の行に次のように表示されます。
1108 1108 cron
4288 1108 \_ CRON
4289 4289 \_ /bin/sh -c /path/to/my/crontab/script1.sh
4290 4289 \_ /bin/bash /path/to/my/crontab/script1.sh
4295 4289 \_ /usr/bin/wget LINK
最初の列はPID、2番目はセッションID、3番目はcronによって開始されたコマンドです。セッションIDを使用して、特定のcronタスクに関連するすべてのプロセスを強制終了できます。したがって、上記の例では、セッションID 4289を強制終了する必要があります。
pkill -s 4289
スクリプトにpkillを入れて、これをcronとして実行する必要があります