64時間ごとにスクリプトを実行するにはどうすればよいですか?

64時間ごとにスクリプトを実行するにはどうすればよいですか?

64時間ごとにスクリプトを実行する必要があります。私は答えが見つかりませんcron。これは使えますか?それともシェルスクリプトでループを使用する必要がありますか?

答え1

1時間ごとに実行し、ランダムな瞬間(たとえば、Unix epoch時間の瞬間0)以降の時間数が64の倍数であることを確認してください。

0 * * * * t=$(date +\%s); [ "$(( (t / 3600) \% 64 ))" -eq 0 ] && your-command

答え2

たとえば、crontab "フロントエンド"を使用することをお勧めします。クローンタップマスター初心者ならcrontabについて学びましょう。

ただし、あなたの場合と同様に、時間設定は0〜23の値のみを受け入れるので、ここではcrontabを使用することはできません。

代わりにat、あなたの場合は、次のようなものを使用することをお勧めします。

at now + 64 hours

その後、コマンドを入力するか、

echo "<your command>" | at now + 64 hours

デフォルトでは、コマンドが最後に呼び出されたときにすぐに実行されるようにスケジュールします。また、時間デルタではなく正確な時間が必要な場合は、時間算術を実行してからat正確な時間でコマンドを実行することをお勧めします。

私は読書を強くお勧めしますマニュアルページat、かなり包括的だからです。

答え3

cron日付または時計のイベントごとに実行するために使用されます(たとえば、月または週の最初の日、または1日の3時間ごと)。

単に時計時間や日付算術で表示できない間隔で実行されるジョブの場合は、タイマーを使用することをお勧めしますsystemd。もちろん、systemdこれはそのデバイスでタイマーを実行している場合にのみ機能します。

スクリプトを実行するためのサービスファイルとイベントを管理するためのタイマーファイルという2つのファイルが必要です。

$cat /etc/systemd/system/myscript.service

[Unit]
Description=this service runs my script

[Service]
ExecStart=/full/path/to/myscript.sh

#[Install]
#WantedBy=multi-user.target

サービスは成功の有無などを確認せずにスクリプトを実行します。サービスはオプションで有効にできます。systemctl enable myscript.serviceつまり、起動時に一度実行されます。タイマーが開始イベントを処理するので、これについて言及しました。スクリプトを手動で実行できますsystemctl start myscript.service


$cat /etc/systemd/system/myscript.timer

[Unit]
Description=this timer runs myscript.service every 64h

[Timer]
OnBootSec=120
OnUnitActiveSec=64h


[Install]
WantedBy=timers.target

myscript.serviceこれは、サービスが最後にアクティブ化されてから64時間ごとに実行されるタイマーであり、開始後2分間実行されるタイマーです(サービスが実行できるようにシステムが正しい状態であることを確認するため)。タイマーが作動します。いいえ電源を入れ直したり切ったりする場合は、64時間を覚えておいてください。それに応じてタイマーを有効にして起動します。

systemctl enable myscript.timer
systemctl start myscript.timer

タイマーは起動後または最後のデバイスのアクティブ化後にのみ開始されるため、タイマーを実行するにはサービスを一度実行する必要があります。

systemctl start myscript.service

タイマーの状態を確認してください。

systemctl list-timers

答え4

驚いたことに、誰も次のことを言及していません。

アナクロン

ほとんどのディストリビューションでは標準です。

関連情報