cronによって再起動されるまで、特定の時間にスクリプトを停止する方法は?

cronによって再起動されるまで、特定の時間にスクリプトを停止する方法は?

OSMC(Debianベース)を実行するRaspberry Piがあります。

真夜中にsync.shスクリプトを起動するようにcronジョブを設定しました。

0 0 * * * /usr/local/bin sync.sh

午前7時にスクリプトを停止する必要があります。現在私は以下を使用しています:

0 7 * * * shutdown -r now

もっと良い方法がありますか?再起動が少しひどいと思います。

ありがとう

答え1

次のコマンドを使用して実行できます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。同期処理に時間がかかりすぎる場合は、データ同期への別のアプローチ(ブロックコピーなど)を検討できます。

答え2

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εいくつかの雑多な

答え3

また、指定された時間にサービスまたはスクリプトを「停止」または「終了」するために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として実行する必要があります。

関連情報