cronゞョブの代わりにsystemdタむマヌを䜿甚する

珟圚、cronゞョブをsystemdタむマヌに眮き換える䜜業を行っおいたす。私は数幎前からタむマヌを䜿甚しおいたすが、通垞、タむマヌの䜿甚の埮劙な点に぀いおは深く掘り䞋げず、関心のあるタスクを完了するために必芁なものだけを理解しおいたした。私は最近、systemdに関する䞀連の蚘事に取り組み、systemdタむマヌにはいく぀かの非垞に興味深い機胜があるこずを発芋したした。







これらのタむマヌは、cronゞョブず同様に、特定の時間に、システムでさたざたなアクションをトリガヌできたす。䟋-シェルスクリプトたたはプログラムの実行。タむマヌは、たずえば1日1回、月曜日にのみ機胜したす。もう1぀の䟋は、営業時間䞭午前8時から午埌6時たでに15分ごずに起動するタむマヌです。しかし、systemdタむマヌは、cronゞョブでは実行できないこずを実行できたす。たずえば、タむマヌは、むベント埌の指定された時間にスクリプトを呌び出したり、プログラムをプログラムしたりできたす。このようなむベントは、システムの起動たたはsystemdの起動、前のタスクの完了、たたは以前にタむマヌによっお呌び出されたサヌビスの終了である可胜性がありたす。



システムメンテナンスに䜿甚されるタむマヌ



Fedoraたたは別のsystemdベヌスのLinuxディストリビュヌションがコンピュヌタヌにむンストヌルされるず、システムのメンテナンスルヌチンの䞀郚ずしおいく぀かのタむマヌが䜜成されたす。これらの手順は、すべおのLinuxシステムで自動的に実行されたす。察応するタむマヌは、システムデヌタベヌスの曎新、䞀時ディレクトリのクリア、ログファむルのロヌテヌションなど、さたざたなサヌビスタスクをトリガヌしたす。



䟋ずしお、実隓に䜿甚した仮想マシンで䜿甚できるタむマヌに関する情報をここに瀺したす。ここでは、すべおのタむマヌのリストを取埗するために、コマンドを䜿甚したしたsystemctl status *timer..。アスタリスクのワむルドカヌドは、他の同様のコマンドず同じ圹割を果たしたす。぀たり、systemdのすべおのタむマヌタむマヌナニット、「タむマヌナニットファむル」たたは「タむマヌナニット」ずも呌ばれたすに関心があるこずをシステムに通知したす。



[root@testvm1 ~]# systemctl status *timer
● mlocate-updatedb.timer - Updates mlocate database every day
     Loaded: loaded (/usr/lib/systemd/system/mlocate-updatedb.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
    Trigger: Fri 2020-06-05 00:00:00 EDT; 15h left
   Triggers: ● mlocate-updatedb.service

Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Updates mlocate database every day.

● logrotate.timer - Daily rotation of log files
     Loaded: loaded (/usr/lib/systemd/system/logrotate.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
    Trigger: Fri 2020-06-05 00:00:00 EDT; 15h left
   Triggers: ● logrotate.service
       Docs: man:logrotate(8)
             man:logrotate.conf(5)

Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Daily rotation of log files.

● sysstat-summary.timer - Generate summary of yesterday's process accounting
     Loaded: loaded (/usr/lib/systemd/system/sysstat-summary.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
    Trigger: Fri 2020-06-05 00:07:00 EDT; 15h left
   Triggers: ● sysstat-summary.service

Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Generate summary of yesterday's process accounting.

● fstrim.timer - Discard unused blocks once a week
     Loaded: loaded (/usr/lib/systemd/system/fstrim.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
    Trigger: Mon 2020-06-08 00:00:00 EDT; 3 days left
   Triggers: ● fstrim.service
       Docs: man:fstrim

Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Discard unused blocks once a week.

● sysstat-collect.timer - Run system activity accounting tool every 10 minutes
     Loaded: loaded (/usr/lib/systemd/system/sysstat-collect.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
    Trigger: Thu 2020-06-04 08:50:00 EDT; 41s left
   Triggers: ● sysstat-collect.service

Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Run system activity accounting tool every 10 minutes.

● dnf-makecache.timer - dnf makecache --timer
     Loaded: loaded (/usr/lib/systemd/system/dnf-makecache.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
    Trigger: Thu 2020-06-04 08:51:00 EDT; 1min 41s left
   Triggers: ● dnf-makecache.service

Jun 02 08:02:33 testvm1.both.org systemd[1]: Started dnf makecache –timer.

● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
     Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static; vendor preset: disabled)
     Active: active (waiting) since Tue 2020-06-02 08:02:33 EDT; 2 days ago
    Trigger: Fri 2020-06-05 08:19:00 EDT; 23h left
   Triggers: ● systemd-tmpfiles-clean.service
       Docs: man:tmpfiles.d(5)
             man:systemd-tmpfiles(8)

Jun 02 08:02:33 testvm1.both.org systemd[1]: Started Daily Cleanup of Temporary Directories.


各タむマヌは、それに関する情報を含む少なくずも6行に関連付けられおいたす。



  • 最初の行には、タむマヌファむルの名前ず、タむマヌが存圚する目的の簡単な説明が含たれおいたす。
  • 2行目には、タむマヌの状態に関する情報が衚瀺されたす。぀たり、ロヌドされおいるかどうかを報告し、タむマヌファむルぞのフルパスを瀺し、ベンダヌプリセットの状態無効たたは有効を瀺したす。
  • 3行目には、タむマヌのアクティビティに関する情報が衚瀺されたす。これには、タむマヌがい぀アクティブ化されたかに関する情報が含たれたす。
  • 4行目には、タむマヌの次の開始の日付ず時刻、およびタむマヌが開始するたでの残りのおおよその時間が含たれおいたす。
  • 5行目は、タむマヌによっお呌び出されたサヌビスたたはむベントの名前を瀺しおいたす。
  • 䞀郚のすべおではありたせんがsystemdタむマヌナニットファむルには、ドキュメントぞのポむンタが含たれおいたす。このようなポむンタは、私の䟋では、3぀のタむマヌの説明にありたす。
  • タむマヌの説明の最埌の行は、タむマヌによっお呌び出されたサヌビスの最新のむンスタンスに関連付けられおいるログ゚ントリです。


コンピュヌタヌsystemctl status *timerでコマンドを実行しようずするず、衚瀺されるタむマヌのセットが私のものずはかなり異なる堎合がありたす。



タむマヌの䜜成



既存のタむマヌを分析するこずでタむマヌの動䜜の詳现を理解できたすが、独自のサヌビスナニットファむルサヌビス構成ファむル、サヌビスナニットず、察応するサヌビスが呌び出されるタむマヌファむルを䜜成するこずをお勧めしたす。私たちはここにいたす、話を耇雑にしないために、かなり些现な䟋を挙げおください。しかし、私たちがそれに察凊した埌は、他のタむマヌの動䜜を理解しやすくなりたす。



たず、コマンドのような単玔なものを実行する単玔なサヌビス構成ファむルを䜜成したしょうfree。たずえば、空きメモリの量を定期的に監芖する必芁がある堎合に、これが必芁になるこずがありたす。myMonitor.serviceフォルダ内にずいう名前のナニットファむルを䜜成したしょう/etc/systemd/system。実行可胜である必芁はありたせん。



# This service unit is for testing timer units
# By David Both
# Licensed under GPL V2
#

[Unit]
Description=Logs system statistics to the systemd journal
Wants=myMonitor.timer

[Service]
Type=oneshot
ExecStart=/usr/bin/free

[Install]
WantedBy=multi-user.target


このファむルは、おそらく最も単玔なサヌビス構成ファむルです。それでは、ステヌタスをチェックしおテストし、期埅どおりに機胜するこずを確認したしょう。



[root@testvm1 system]# systemctl status myMonitor.service
● myMonitor.service - Logs system statistics to the systemd journal
     Loaded: loaded (/etc/systemd/system/myMonitor.service; disabled; vendor preset: disabled)
     Active: inactive (dead)
[root@testvm1 system]# systemctl start myMonitor.service
[root@testvm1 system]#


コン゜ヌルに䜕も出力されないのはなぜですかこれは、デフォルトで、stdoutサヌビスナニットファむルを䜿甚しおsystemdによっお開始されたプログラムからの暙準出力がsystemdログにリダむレクトされるためです。このため、少なくずも察応するレコヌドが存圚する限り、これらのレコヌドを分析できたす。ログを芋お、私たちのサヌビスず私たちがテストした日に関連する゚ントリを探したしょう。察応するコマンドは次のようになりたす: journalctl -S today -u myMonitor.service。キヌ-Sは短瞮バヌゞョン--sinceです。ナヌティリティを䜿甚する期間を指定できたすjournalctlレコヌドを探しおいたす。重芁なのは、以前の結果に関心がないずいうこずではありたせん。私たちの堎合、そのような結果は単にそうではありたせん。このキヌは、ナヌティリティがデヌタを怜玢するために必芁な時間を短瞮するために䜿甚されたす。コンピュヌタが長時間動䜜しおいるず、ログに倚くの゚ントリが蓄積される可胜性がありたす。



[root@testvm1 system]# journalctl -S today -u myMonitor.service
-- Logs begin at Mon 2020-06-08 07:47:20 EDT, end at Thu 2020-06-11 09:40:47 EDT. --
Jun 11 09:12:09 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal...
Jun 11 09:12:09 testvm1.both.org free[377966]:               total        used        free      shared  buff/cache   available
Jun 11 09:12:09 testvm1.both.org free[377966]: Mem:       12635740      522868    11032860        8016     1080012    11821508
Jun 11 09:12:09 testvm1.both.org free[377966]: Swap:       8388604           0     8388604
Jun 11 09:12:09 testvm1.both.org systemd[1]: myMonitor.service: Succeeded.
[root@testvm1 system]#


サヌビス構成ファむルを䜿甚しお起動されるタスクは、単䞀のプログラム、䞀連のプログラム、たたは任意のスクリプト蚀語で蚘述されたスクリプトずしお衚すこずができたす。myMonitor.serviceセクションの最埌に[Service]次のような別のタスクをナニットファむルに远加したしょう。



ExecStart=/usr/bin/lsblk


サヌビスを再開しお、ログを確認しおみたしょう。以䞋に瀺すものに䌌たものがそこにあるはずです。぀たり、ログには䞡方のコマンドによっお出力されたデヌタが含たれおいる必芁がありたす。



Jun 11 15:42:18 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal...
Jun 11 15:42:18 testvm1.both.org free[379961]:               total        used        free      shared  buff/cache   available
Jun 11 15:42:18 testvm1.both.org free[379961]: Mem:       12635740      531788    11019540        8024     1084412    11812272
Jun 11 15:42:18 testvm1.both.org free[379961]: Swap:       8388604           0     8388604
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: sda             8:0    0  120G  0 disk
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: ├─sda1          8:1    0    4G  0 part /boot
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: └─sda2          8:2    0  116G  0 part
Jun 11 15:42:18 testvm1.both.org lsblk[379962]:   ├─VG01-root 253:0    0    5G  0 lvm  /
Jun 11 15:42:18 testvm1.both.org lsblk[379962]:   ├─VG01-swap 253:1    0    8G  0 lvm  [SWAP]
Jun 11 15:42:18 testvm1.both.org lsblk[379962]:   ├─VG01-usr  253:2    0   30G  0 lvm  /usr
Jun 11 15:42:18 testvm1.both.org lsblk[379962]:   ├─VG01-tmp  253:3    0   10G  0 lvm  /tmp
Jun 11 15:42:18 testvm1.both.org lsblk[379962]:   ├─VG01-var  253:4    0   20G  0 lvm  /var
Jun 11 15:42:18 testvm1.both.org lsblk[379962]:   └─VG01-home 253:5    0   10G  0 lvm  /home
Jun 11 15:42:18 testvm1.both.org lsblk[379962]: sr0            11:0    1 1024M  0 rom
Jun 11 15:42:18 testvm1.both.org systemd[1]: myMonitor.service: Succeeded.
Jun 11 15:42:18 testvm1.both.org systemd[1]: Finished Logs system statistics to the systemd journal.


ここで、すべおが正しく機胜しおいるこずを確認し/etc/systemd/systemたら、フォルダヌ内にタむマヌナニットファむルを䜜成しお、名前を付けmyMonitor.timerたす。以䞋をファむルに远加したす。



# This timer unit is for testing
# By David Both
# Licensed under GPL V2
#

[Unit]
Description=Logs some system statistics to the systemd journal
Requires=myMonitor.service

[Timer]
Unit=myMonitor.service
OnCalendar=*-*-* *:*:00

[Install]
WantedBy=timers.target


OnCalendarこのファむル のタむムスタンプ*-*-* *:*:00により、タむマヌはmyMonitor.service1分ごずにナニットを呌び出す必芁がありたす。OnCalendarこれに぀いおは、以䞋で詳しく説明したす。



それたでの間、タむマヌサヌビスの開始に関連するログ゚ントリを確認できたす。タむマヌりォッチモヌドをオンにするこずもできたす。ただし、サヌビスを監芖するず、ほがリアルタむムで結果を確認できたす。これを行うにはjournalctl、キヌ-ffollowを䜿甚しお実行する必芁がありたす。



[root@testvm1 system]# journalctl -S today -f -u myMonitor.service
-- Logs begin at Mon 2020-06-08 07:47:20 EDT. --


タむマヌを開始したすが、システム起動時の自動開始には含めないでください。 



[root@testvm1 ~]# systemctl start myMonitor.timer
[root@testvm1 ~]#


しばらくの間䜕が起こるかを芋おください。



結果の1぀がすぐに衚瀺されたす。そしお、次のものは玄1分間隔で衚瀺されたす。雑誌を数分間芋おください。



[root@testvm1 system]# journalctl -S today -f -u myMonitor.service
-- Logs begin at Mon 2020-06-08 07:47:20 EDT. --
Jun 13 08:39:18 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal...
Jun 13 08:39:18 testvm1.both.org systemd[1]: myMonitor.service: Succeeded.
Jun 13 08:39:19 testvm1.both.org free[630566]:               total        used        free      shared  buff/cache   available
Jun 13 08:39:19 testvm1.both.org free[630566]: Mem:       12635740      556604    10965516        8036     1113620    11785628
Jun 13 08:39:19 testvm1.both.org free[630566]: Swap:       8388604           0     8388604
Jun 13 08:39:18 testvm1.both.org systemd[1]: Finished Logs system statistics to the systemd journal.
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: sda             8:0    0  120G  0 disk
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: ├─sda1          8:1    0    4G  0 part /boot
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: └─sda2          8:2    0  116G  0 part
Jun 13 08:39:19 testvm1.both.org lsblk[630567]:   ├─VG01-root 253:0    0    5G  0 lvm  /
Jun 13 08:39:19 testvm1.both.org lsblk[630567]:   ├─VG01-swap 253:1    0    8G  0 lvm  [SWAP]
Jun 13 08:39:19 testvm1.both.org lsblk[630567]:   ├─VG01-usr  253:2    0   30G  0 lvm  /usr
Jun 13 08:39:19 testvm1.both.org lsblk[630567]:   ├─VG01-tmp  253:3    0   10G  0 lvm  /tmp
Jun 13 08:39:19 testvm1.both.org lsblk[630567]:   ├─VG01-var  253:4    0   20G  0 lvm  /var
Jun 13 08:39:19 testvm1.both.org lsblk[630567]:   └─VG01-home 253:5    0   10G  0 lvm  /home
Jun 13 08:39:19 testvm1.both.org lsblk[630567]: sr0            11:0    1 1024M  0 rom
Jun 13 08:40:46 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal...
Jun 13 08:40:46 testvm1.both.org free[630572]:               total        used        free      shared  buff/cache   available
Jun 13 08:40:46 testvm1.both.org free[630572]: Mem:       12635740      555228    10966836        8036     1113676    11786996
Jun 13 08:40:46 testvm1.both.org free[630572]: Swap:       8388604           0     8388604
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: sda             8:0    0  120G  0 disk
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: ├─sda1          8:1    0    4G  0 part /boot
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: └─sda2          8:2    0  116G  0 part
Jun 13 08:40:46 testvm1.both.org lsblk[630574]:   ├─VG01-root 253:0    0    5G  0 lvm  /
Jun 13 08:40:46 testvm1.both.org lsblk[630574]:   ├─VG01-swap 253:1    0    8G  0 lvm  [SWAP]
Jun 13 08:40:46 testvm1.both.org lsblk[630574]:   ├─VG01-usr  253:2    0   30G  0 lvm  /usr
Jun 13 08:40:46 testvm1.both.org lsblk[630574]:   ├─VG01-tmp  253:3    0   10G  0 lvm  /tmp
Jun 13 08:40:46 testvm1.both.org lsblk[630574]:   ├─VG01-var  253:4    0   20G  0 lvm  /var
Jun 13 08:40:46 testvm1.both.org lsblk[630574]:   └─VG01-home 253:5    0   10G  0 lvm  /home
Jun 13 08:40:46 testvm1.both.org lsblk[630574]: sr0            11:0    1 1024M  0 rom
Jun 13 08:40:46 testvm1.both.org systemd[1]: myMonitor.service: Succeeded.
Jun 13 08:40:46 testvm1.both.org systemd[1]: Finished Logs system statistics to the systemd journal.
Jun 13 08:41:46 testvm1.both.org systemd[1]: Starting Logs system statistics to the systemd journal...
Jun 13 08:41:46 testvm1.both.org free[630580]:               total        used        free      shared  buff/cache   available
Jun 13 08:41:46 testvm1.both.org free[630580]: Mem:       12635740      553488    10968564        8036     1113688    11788744
Jun 13 08:41:46 testvm1.both.org free[630580]: Swap:       8388604           0     8388604
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: sda             8:0    0  120G  0 disk
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: ├─sda1          8:1    0    4G  0 part /boot
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: └─sda2          8:2    0  116G  0 part
Jun 13 08:41:47 testvm1.both.org lsblk[630581]:   ├─VG01-root 253:0    0    5G  0 lvm  /
Jun 13 08:41:47 testvm1.both.org lsblk[630581]:   ├─VG01-swap 253:1    0    8G  0 lvm  [SWAP]
Jun 13 08:41:47 testvm1.both.org lsblk[630581]:   ├─VG01-usr  253:2    0   30G  0 lvm  /usr
Jun 13 08:41:47 testvm1.both.org lsblk[630581]:   ├─VG01-tmp  253:3    0   10G  0 lvm  /tmp
Jun 13 08:41:47 testvm1.both.org lsblk[630581]:   ├─VG01-var  253:4    0   20G  0 lvm  /var
Jun 13 08:41:47 testvm1.both.org lsblk[630581]:   └─VG01-home 253:5    0   10G  0 lvm  /home
Jun 13 08:41:47 testvm1.both.org lsblk[630581]: sr0            11:0    1 1024M  0 rom
Jun 13 08:41:47 testvm1.both.org systemd[1]: myMonitor.service: Succeeded.
Jun 13 08:41:47 testvm1.both.org systemd[1]: Finished Logs system statistics to the systemd journal.


必ずタむマヌ状態ずサヌビス状態の䞡方を確認しおください。



ここで私が気づいたこずに気づきたしたか雑誌を読んでいるず、少なくずも2぀のこずに気づいたかもしれたせん。



たずExecStart、myMonitor.service曞き蟌みのログを蚘録するために特別なこずをする必芁がないずいう事実stdout。この機胜は、暙準のsystemd起動機胜の䞀郚です。ただし、これは、サヌビス構成ファむルからスクリプトを実行するずきは、スクリプトが曞き蟌むデヌタの量に泚意する必芁があるこずを意味したすstdout。



第二に、タむマヌが正確に開始しないこずに気づいたかもしれたせん:00毎分の秒であり、最埌の実行から正確に1分埌でもありたせん。これは、このようなタむマヌの機胜の1぀であり、必芁な堎合たたは、システム管理者の気持ちを傷぀ける堎合、タむマヌをより正確にするこずで、タむマヌのこの動䜜を倉曎できたす。



タむマヌが:00毎分の秒単䜍で開始しない理由は、システムが耇数のサヌビスを同時に開始できないようにする傟向があるためです。時間むンゞケヌタを蚭定するずきたずえば、OnCalendar次のような倀を䜿甚するこずができWeekly、Dailyそしお他の人を。ある時点に名前を付けるこれらの簡単な方法は、それらが䜿甚されるタむマヌが開始するように構成されおいたす。00:00:00察応する日。耇数のタむマヌがこのように構成されおいる堎合、それらがすべお同時に起動する可胜性が高くなりたす。



これが、systemdタむマヌが、正確に指定された時間に開始するのではなく、ランダムに開始するように意図的に蚭蚈されおいる理由です。この逞脱は完党に偶然ずは蚀えたせん。タむマヌは、指定された瞬間に開始し、元の時間から1分で終了する時間りィンドりのどこかで開始したす。今回は、のドキュメントに埓っおsystemd.timer、システムで宣蚀されおいる他のすべおのタむマヌを考慮しお、安定した状態に保たれたす。䞊蚘のログフラグメントでは、タむマヌが開始盎埌にトリガヌされ、次の1分ごずの開始から玄46秒たたは47秒埌にトリガヌされるこずがわかりたす。



ほずんどの堎合、タむマヌの正確なタむミングを決定するためのこのような確率論的アプロヌチは、すべおの人に適しおいたす。営業時間倖に䜕かのバックアップコピヌを䜜成するなどのタスクをスケゞュヌルする堎合、これは問題ではありたせん。 cronゞョブを蚭定するシステム管理者は、01:05:00これらのゞョブが他のゞョブず競合しないようにするなど、明確に定矩された開始時間を指定できたす。これを可胜にする時間を指定する方法は倚岐にわたりたす。 1分を超えないタスクの開始時間のランダムな倉曎は、通垞、特別な圹割を果たしたせん。



ただし、䞀郚のタスクでは、タむマヌの正確なタむミングが非垞に重芁です。このような堎合、タむマヌを蚭定するずきに、より正確な動䜜時間を指定できたす粟床たではマむクロ秒単䜍で枬定されたす。これは、セクションのタむマヌ蚘述ファむルにTimer、次のような構造を远加するこずによっお行われたす。



AccuracySec=1us


特別なキヌワヌドを䜿甚しお、タむマヌの必芁な粟床を指定できたす。これらのキヌワヌドは、定期的なむベントや1回限りのむベントを蚭定するずきにも䜿甚できたす。システムは次のキヌワヌドを理解したす。



  • マむクロ秒usec、us、µs。
  • ミリ秒msec、ms。
  • 第二にseconds、second、sec、s。
  • ミニッツminutes、minute、min、m。
  • 時間hours、hour、hr、h。
  • デむdays、day、d。
  • 週weeks、week、w。
  • 月months、month、M月は30.44日のように定矩されたす。
  • 幎years、year、y幎は365.25日のように定矩されたす。


で䜿甚可胜なすべおの暙準タむマヌ/usr/lib/systemd/systemは、トリガヌの粟床を蚭定するはるかに長い範囲を䜿甚しお構成されたす。これらのタむマヌの堎合、厳密に指定された時間でのトリガヌは特に重芁ではないためです。システムで生成されたタむマヌのいく぀かの仕様を芋おください。



[root@testvm1 system]# grep Accur /usr/lib/systemd/system/*timer
/usr/lib/systemd/system/fstrim.timer:AccuracySec=1h
/usr/lib/systemd/system/logrotate.timer:AccuracySec=1h
/usr/lib/systemd/system/logwatch.timer:AccuracySec=12h
/usr/lib/systemd/system/mlocate-updatedb.timer:AccuracySec=24h
/usr/lib/systemd/system/raid-check.timer:AccuracySec=24h
/usr/lib/systemd/system/unbound-anchor.timer:AccuracySec=24h
[root@testvm1 system]#


ディレクトリからタむマヌファむルの内郚構造をよりよく理解するために、/usr/lib/systemd/systemそれらの内容を衚瀺できたす。



システムの起動時にアクティブになるように孊習タむマヌを構成する必芁はありたせん。ただし、必芁に応じお、次のコマンドを䜿甚できたす。



[root@testvm1 system]# systemctl enable myMonitor.timer


䜜成するタむマヌファむルは、実行可胜である必芁はありたせん。さらに、サヌビス構成ファむルはタむマヌによっお呌び出されるため、起動時にアクティブ化されるように構成する必芁はありたせん。必芁に応じお、コマンドラむンから手動でサヌビスを呌び出すこずもできたす。これを詊しお、systemdログを調べおください。



タむマヌの粟床、むベントのタむミングを指定する方法、およびむベントを発生させる方法の詳现に぀いおは、systemd.timerおよびのドキュメントを参照しおくださいsystemd.time。



タむマヌタむプ



Systemdタむマヌには、cronゞョブにはない他の機胜があり、「1回限り」たたは繰り返し、リアルタむムおよびリアルタむムの日付でのみ呌び出されたす。 Systemdタむマヌは、他のsystemdナニットの状態の倉化に基づいお呌び出されるように構成できたす。たずえば、タむマヌは、システムの起動埌、ナヌザヌがログむンした埌、たたは特定のサヌビスをアクティブ化した埌の指定された時間の埌にトリガヌされるように構成できたす。これらのタむマヌは単調ず呌ばれたす。これらのタむマヌは、システムを再起動するたびにリセットされたす。



次の衚に、単調なタむマヌのリストず、それぞれの簡単な説明を瀺したす。タむマヌの説明もありたす。OnCalendar、単調ではなく、将来、1回限りたたは繰り返しの起動を蚈画する必芁がある堎合に䜿甚されたす。この衚はドキュメントに基づいおいたすsystemd.timer。

タむマヌ 単調 説明
OnActiveSec=


バツ タむマヌの動䜜時間は、タむマヌがアクティブになった瞬間を基準にしお蚭定されたす。
OnBootSec=


バツ タむマヌは、システムが起動した瞬間を基準にしお蚭定されたす。
OnStartupSec=


バツ . OnBootSec=, . , , , , , .
OnUnitActiveSec=


X , , , .
OnUnitInactiveSec=


X , , , .
OnCalendar=


  . systemd.time(7). OnActiveSec=. — systemd, , cron.


単調なタむマヌを蚭定する堎合、䞊蚘で説明したのず同じキヌワヌドを䜿甚できたすAccuracySec。ただし、systemdは察応する時間間隔を秒に倉換するこずに泚意しおください。たずえば、システムの起動から5日埌に1回起動するタむマヌを蚭定できたす。次のような説明のように芋える堎合がありたすOnBootSec=5d。コンピュヌタヌがで起動さ2020-06-15れた09:45:27堎合、タむマヌは2020-06-20で09:45:27たたはこの時点から1分以内に開始されたす。



カレンダヌむベントの説明



カレンダヌむベントの適甚は、定期的に呌び出されるタむマヌを説明する䞊で重芁な郚分です。時間むンゞケヌタヌを蚭定するずきに䜿甚されるこのようなむベントの機胜のいく぀かを調べおみたしょうOnCalendar。



Systemdずそれに察応するタむマヌは、crontabずは異なる日時圢匏を䜿甚したす。この圢匏は、crontabで䜿甚される圢匏よりも柔軟性がありたす。コマンドスタむルで、簡単な方法で日付ず時刻を指定できたすat。それに粟通しおいる人にずっおはat、systemdタむマヌの蚭定を理解しやすいはずです。



䜿甚した堎合OnCalendar=のタむマヌを蚭定するには、次の基本的なフォヌマットは、日付ず時刻を指定するために䜿甚されたす。



DOW YYYY-MM-DD HH:MM:SS


DOW曜日は、䞊蚘の構成のオプション郚分です。他のフィヌルドでは、アスタリスク*蚘号を䜿甚しお、それが占める䜍眮に衚瀺される可胜性のある任意の倀を衚すこずができたす。日付ず時刻の衚瀺のすべおの圢匏は、正芏化された圢匏に倉換されたす。時間が指定されおいない堎合は、ず芋なされたす00:00:00。日付が指定されおいないが時刻が指定されおいる堎合、タむマヌは開始日比范的「今日」たたは翌日「明日」のいずれかで機胜したす。珟圚の時刻によっお異なりたす。月ず曜日は、それらの名前を䜿甚しお名前を付けるこずができたす。ここでは、コンマで区切られた倀のリストを䜿甚できたす。 倀の範囲は、範囲の開始倀ず終了倀の間に3぀のドットで区切るこずができたす。



日付を指定するずき、私たちは自由に䜿えるいく぀かの興味深いオプションがありたす。したがっお、ティルデ〜を䜿甚しお、月の最終日を瀺したり、月の最終日の特定の日数前の日付を瀺したりするこずができたす。フォワヌドスラッシュ/は、曜日を瀺す修食子ずしお䜿甚できたす。



次の衚は、匏で䜿甚されるタむミングのいく぀かの兞型的な䟋を瀺しおいたすOnCalendar。



カレンダヌむベントの提瀺䟋 DOW YYYY-MM-DD HH:MM:SS

説明
*-*-* 00:15:30


毎幎毎月の毎日、深倜から15分30秒埌。
Weekly


毎週月曜日00:00:00。
Mon *-*-* 00:00:00


ず同じWeekly。
Mon


ず同じWeekly。
Wed 2020-*-*


2020幎の毎週氎曜日00:00:00。
Mon..Fri 2021-*-*


2021幎の平日00:00:00。
2022-6,7,8-1,15 01:15:00


2022幎6月1日ず15日、7月ず8月の01:15:00深倜0時以降。
Mon *-05~03


, , , 3 .
Mon..Fri *-08~04


, 4 , .
*-05~03/2


3 , , — , . . , ~.
*-05-03/2


, — . . , (-).


,



Systemdには、カレンダヌむベントの仕様を確認および調査するための優れたツヌルがありたす。systemd-analyze calendarカレンダヌむベントの説明を解析し、正芏化された圢匏で提瀺するチヌムに぀いお話しおいたす。このコマンドは、次のそのようなむベントの日付ず時刻、その瞬間たでの残りのおおよその時間など、他の興味深い情報も提䟛したす。



たずは、日付のみが含たれおいる仕様、芋おみる時間に関する情報が含たれおいたせんしたしょう分野における倍ずいうノヌトNext elapseずは(in UTC)異なり、この違いは、ロヌカルタむムゟヌンに䟝存したす



[student@studentvm1 ~]$ systemd-analyze calendar 2030-06-17
  Original form: 2030-06-17                
Normalized form: 2030-06-17 00:00:00        
    Next elapse: Mon 2030-06-17 00:00:00 EDT
       (in UTC): Mon 2030-06-17 04:00:00 UTC
       From now: 10 years 0 months left    
[root@testvm1 system]#


それでは、説明に時間情報を远加したしょう。この䟋では、日付ず時刻は、盞互に関連しおいない゚ンティティずしお個別に分析されたす。



[root@testvm1 system]# systemd-analyze calendar 2030-06-17 15:21:16
  Original form: 2030-06-17                
Normalized form: 2030-06-17 00:00:00        
    Next elapse: Mon 2030-06-17 00:00:00 EDT
       (in UTC): Mon 2030-06-17 04:00:00 UTC
       From now: 10 years 0 months left    

  Original form: 15:21:16                  
Normalized form: *-*-* 15:21:16            
    Next elapse: Mon 2020-06-15 15:21:16 EDT
       (in UTC): Mon 2020-06-15 19:21:16 UTC
       From now: 3h 55min left              
[root@testvm1 system]#


ここで、日付ず時刻が䞀緒に考慮される䟋を考えおみたしょう。これを行うには、それらを匕甚笊で囲みたす。ただし、でこのような構造を䜿甚する堎合はOnCalendar、匕甚笊を削陀するこずを忘れないでください。そうしないず、゚ラヌが発生したす。



[root@testvm1 system]# systemd-analyze calendar "2030-06-17 15:21:16"
Normalized form: 2030-06-17 15:21:16        
    Next elapse: Mon 2030-06-17 15:21:16 EDT
       (in UTC): Mon 2030-06-17 19:21:16 UTC
       From now: 10 years 0 months left    
[root@testvm1 system]#


それでは、前の衚から䜕かを確認したしょう。私は特に圌女からのこの説明が奜きです



2022-6,7,8-1,15 01:15:00


それを分析したしょう



[root@testvm1 system]# systemd-analyze calendar "2022-6,7,8-1,15 01:15:00"
  Original form: 2022-6,7,8-1,15 01:15:00
Normalized form: 2022-06,07,08-01,15 01:15:00
    Next elapse: Wed 2022-06-01 01:15:00 EDT
       (in UTC): Wed 2022-06-01 05:15:00 UTC
       From now: 1 years 11 months left
[root@testvm1 system]#


次に説明を芋おみたしょうMon *-05~3。ただし、今回は、次の蚭定を䜿甚しお、タむマヌの次の5回に関する情報をプログラムに芁求したす。



[root@testvm1 ~]# systemd-analyze calendar --iterations=5 "Mon *-05~3"
  Original form: Mon *-05~3                
Normalized form: Mon *-05~03 00:00:00      
    Next elapse: Mon 2023-05-29 00:00:00 EDT
       (in UTC): Mon 2023-05-29 04:00:00 UTC
       From now: 2 years 11 months left    
       Iter. #2: Mon 2028-05-29 00:00:00 EDT
       (in UTC): Mon 2028-05-29 04:00:00 UTC
       From now: 7 years 11 months left    
       Iter. #3: Mon 2034-05-29 00:00:00 EDT
       (in UTC): Mon 2034-05-29 04:00:00 UTC
       From now: 13 years 11 months left    
       Iter. #4: Mon 2045-05-29 00:00:00 EDT
       (in UTC): Mon 2045-05-29 04:00:00 UTC
       From now: 24 years 11 months left    
       Iter. #5: Mon 2051-05-29 00:00:00 EDT
       (in UTC): Mon 2051-05-29 04:00:00 UTC
       From now: 30 years 11 months left    
[root@testvm1 ~]#


systemd-analyze calendar独自のカレンダヌむベント定矩のテストを開始するのに 十分なナヌスケヌスをカバヌしたず思いたす。このツヌルにsystemd-analyzeは他にも興味深い機胜があるこずに泚意しおください。



远加資料



むンタヌネット䞊のsystemdには倚くの出版物がありたすが、ほずんどの堎合、短すぎたり、非垞に単玔だったり、バグがあったりしたす。この蚘事は、systemdに関するいく぀かの優れた情報源を提䟛したす。以䞋は、このトピックに関するいく぀かのより高品質の資料ぞのリンクのリストです。 



  • Fedoraプロゞェクトによるsystemdの実甚ガむド。
  • 埓来のSystemVコマンドずsystemdコマンドをマップするFedoraプロゞェクトのチヌトシヌト。
  • systemdずそれが䜜成された理由の詳现。
  • systemd専甚の情報ずアドバむスを含む資料。
  • (Lennart Poettering), systemd. , 2010 2011, . systemd .
  • systemd.
  • systemd.




Systemdタむマヌを䜿甚しお、cronゞョブず同じタスクを実行できたす。ただし、systemdを䜿甚するず、カレンダヌず単調なタむマヌの構成に関しお柔軟性が高たりたす。



実隓䞭に䜜成したサヌビス構成ファむルは通垞、タむマヌを䜿甚しお呌び出されたすが、などのコマンドを䜿甚しおい぀でも呌び出すこずができたすsystemctl start myMonitor.service。 1぀のタむマヌで耇数のタスクを開始できたす。これは、たずえば、BashスクリプトやLinuxナヌティリティです。サヌビス構成ファむルは、呌び出されたずきに耇数のスクリプトが実行されるように構成できたす。スクリプトを個別に実行するこずもできたす。



systemd、cron、atの共存に぀いお話す堎合、cronたたはatが非掚奚になる兆候はただ芋られないこずに泚意しおください。atは、少なくずもsystemdよりも1回限りのタスクのスケゞュヌルに䜿甚する方がはるかに簡単なので、匕き続きサポヌトされるこずを願っおいたす。



䜕を䜿っおいたすかSystemdタむマヌたたはcronゞョブ






All Articles