LoginSignup
0
0

More than 3 years have passed since last update.

CentOSで日付・曜日・時間を指定して定期実行したいんだよなあ

Posted at

前の記事

CentOSで定期(繰り返し)実行したいさー

この記事ではシェルスクリプト作成、systemd作成、timer作成を1回やったことあるから大体要領分かるよ、な人向けです。
やったことねえ!やったけど忘れた!な人(自分も含めて)は上記のリンクをクリック!

毎日特定の時間に実行

シェルスクリプト。
テキストにただ書き込むだけの簡単なやつ。
(権限付与を忘れずに…)

/cocoa.sh
#!/usr/bin/bash
echo `date` oneetyannnimakasenasa-i >> /chino.txt

シェルスクリプトをキックするやつ。

/etc/systemd/system/cocoa.service
[Unit]
Description=cocoa

[Service]
Type=simple
ExecStart=/cocoa.sh

[Install]
WantedBy=multi-user.target

ここからが本題!
シェルスクリプトをキックするやつを起こすタイマー。

/etc/systemd/system/cocoa.timer
[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を開くと…
image.png
ちゃんと書き込まれてますです。

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)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0