私はcronで5分ごとに次のような行を実行できることを知っています。
*/5 * * * * /my/script
12:00、12:05、12:10ではなく、12:01、12:06、12:11などで実行したくない場合はどうなりますか?私はこれを行うことができると思います:
1,6,11,16,21,26,31,36,41,46,51,56 * * * * /my/script
...しかし、それは醜いです。それを行うよりエレガントな方法はありますか?
1-56/5 * * * * /my/script
これはvixiecronで動作するはずです。他の実装についてはわかりません。
最初のスケジュールを使用します。
*/5 * * * * /my/script
これをスクリプトの先頭に追加します。
sleep 60
(はい、これは冗談です)
これはかなり古いトピックですが、時間が経つにつれ、他にもいくつかのオプションがあります。その1つはcronをまったく使用せず、systemdタイマーを使用することです。これらを使用すると、他の多くのオプションとともに、秒よりも高い粒度が得られます
詳細はこちら https://wiki.archlinux.org/index.php/Systemd/Timers
たとえば、アドホックコマンドを実行するには
# systemd-run --on-calendar="*:1/5" /bin/touch /tmp/foo2
Running timer as unit run-r31335c4878f24f90b02c8ebed319ca60.timer.
Will run service as unit run-r31335c4878f24f90b02c8ebed319ca60.service.
# systemctl status run-r31335c4878f24f90b02c8ebed319ca60.timer
● run-r31335c4878f24f90b02c8ebed319ca60.timer - /bin/touch /tmp/foo2
Loaded: loaded
Transient: yes
Drop-In: /run/systemd/system/run-r31335c4878f24f90b02c8ebed319ca60.timer.d
└─50-Description.conf, 50-OnCalendar.conf, 50-RemainAfterElapse.conf
Active: active (waiting) since Wed 2017-10-25 09:05:13 UTC; 40s ago
# ls -l /tmp/foo*
-rw-r--r-- 1 root root 0 Oct 25 09:06 /tmp/foo2
# sleep 300; ls -l /tmp/foo*
-rw-r--r-- 1 root root 0 Oct 25 09:11 /tmp/foo2
# date; ls -l /tmp/foo2
Wed Oct 25 09:21:42 UTC 2017
-rw-r--r-- 1 root root 0 Oct 25 09:21 /tmp/foo2
編集:これらのタイプのタイマーは、関連するoncalendar行を使用して適切なサービスファイルを生成するようにしたい場合、再起動後も保持されません