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


12

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

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

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

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

0 7 * * * shutdown -r now

もっと良い方法はありますか?再起動はやり過ぎだと思います。

ありがとう

回答:


25

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。同期プロセスに時間がかかりすぎる場合は、データを同期するための別の方法を検討してください。レプリケーションをブロックすることもできます。


インターネット接続が遅いため、同期に時間がかかるのはなぜですか。特定の信号を推奨しますか?
アンソニー

@Anthony今、どのように同期していますか?
ラビン



あなたはsyncthing(のような他のアプリケーションを試すことができ@Anthony syncthing.net)またはBTSYNC(resilio.com)、シンクへのファイルのブロックレベル上のどの作品
ラビン

9

休止状態が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

killallpsmiscの


以下にあるスクリプトを使用していますが、mirror -cを指定すると、再起動してもかまいません。上記のどれをお勧めしますか?:gist.github.com/feralhosting/4e7e93a7fecd8f55cb4a
アンソニー

LFTPスクリプトがSIGTERMにロックファイルをクリーンアップさせ、17アイドル時間でのサーバータイムアウトまたはさらに悪いinet [64]再番号付けの可能性を考慮すると、私は行く0 0 * * * timeout 7h /usr/local/bin/sync.shか、ほぼ同等のkillall -TERMバリアントになります。
ローマンチボラ

4

また、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として実行する必要があります


cronジョブが実行されるたびにセッションIDは変わりますか?電源を切って入れ直した後はどうですか?
アンソニー

はい、変更されます。ただし、スクリプトを作成すると、PIDを取得して変数に配置できます。名前が表示された場合、その名前を使用できる場合があります。pkill sync.sh
ddlingo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.