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