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
驚いたことに、誰も次のことを言及していません。
アナクロン
ほとんどのディストリビューションでは標準です。