#前の記事
CentOSで定期(繰り返し)実行したいさー
この記事ではシェルスクリプト作成、systemd作成、timer作成を1回やったことあるから大体要領分かるよ、な人向けです。
やったことねえ!やったけど忘れた!な人(自分も含めて)は上記のリンクをクリック!
#毎日特定の時間に実行
シェルスクリプト。
テキストにただ書き込むだけの簡単なやつ。
(権限付与を忘れずに…)
#!/usr/bin/bash
echo `date` oneetyannnimakasenasa-i >> /chino.txt
シェルスクリプトをキックするやつ。
[Unit]
Description=cocoa
[Service]
Type=simple
ExecStart=/cocoa.sh
[Install]
WantedBy=multi-user.target
ここからが本題!
シェルスクリプトをキックするやつを起こすタイマー。
[Unit]
Description=cocoa
[Timer]
Unit=cocoa.service
OnCalendar=*-*-* 9:55:00
[Install]
WantedBy=multi-user.target
タイマー起動!
systemctl enable cocoa.service
systemctl enable cocoa.timer
systemctl start cocoa.timer
さて9:55を過ぎた後にchino.txtを開くと…
ちゃんと書き込まれてますです。
#OnCalendarってどんなふうに設定するん?
一番細かい指定方法を見るのが分かりやすいと思います。
毎月1日~4日の月 or 火曜12:00に起動 という指定です
OnCalendar=Mon,Tue *-*-01..04 12:00:00
-
Mon,Tue
= 月曜と火曜 -
*-*-
= 年と月は指定しないよ(ワイルドカード) -
01..04
= 1日~4日(..
で範囲指定ができる)
#OnCalendarは複数指定できる
毎月1日~4日の月 or 火曜に起動
ただし、 月曜は12:00に起動、火曜は13:00に起動 という指定です。
OnCalendar=Mon *-*-01..04 12:00:00
OnCalendar=Tue *-*-01..04 13:00:00
#指定したタイミングに丁度電源落ちていて実行できなかった時
下記のように Persistent=true
を記載しておくと OS起動時に実行漏れしてたやつは即実行 してくれます。
OnCalendar=Mon *-*-01..04 12:00:00
Persistent=true
仮にちょっと長い間電源が落ちてるなどして、いろんなバッチ処理が溜まっていると、OS起動と同時にそいつらが一斉に走り始めちゃいます。
その辺の考慮漏れに注意です。
#蛇足
今回もDocker上のCentOS8で検証しました。
『毎日〇時に再起動してるから起動後〇時間後の指定でいいや』 だと、イレギュラーな再起動をした時に想定外なタイミングで実行されちゃいます。
イレギュラーな作業をしてる時って他のことって頭から抜けちゃってるんだよね(´・ω・`)
なので、相対的な指定ではなく、時間を決め打ちした指定の方が良いかと思います。
#参考サイトさん
https://wiki.archlinux.jp/index.php/Systemd/タイマー
#バージョン
Windows10 Pro バージョン1909 OSビルド19042.685
Docker Desktop:3.0.0(50684) Engine:20.10.10 Compose:1.27.4
CentOS Linux release 8.2.2004 (Core)