LinuxでSystemdを使用してシェル(コマンド)を実行する!

LinuxでSystemdを使用してシェルを実行します。

Systemdから実行するシェルを作成する!

Systemdから実行するシェルを作成します。以下、例として一般ユーザでdateコマンドを実行するシェルを作成します。

$ cat /home/usradmin/bin/date.sh 
#!/bin/bash

date > /home/usradmin/data/date.txt

Unitを作成するためのディレクトリを作成する!

ユーザ権限でUnitを実行するためのUnitファイルを作成するディレクトを作成します。

$ mkdir -p ~/.config/systemd/user

Unitファイルを作成する!

Unitファイルを作成します。

$ cat /home/usradmin/.config/systemd/user/date.service
[Unit]
Description=Service date.sh

[Service]
Type=oneshot
ExecStart=/home/usradmin/bin/date.sh

[Install]
WantedBy=default.target

UnitファイルがSystemdに認識されていることを確認する!

UnitファイルがSystemdに認識されていることを確認します。オプションに「--user」を使用するところがポイントです。

$ systemctl --user status date.service
○ date.service - Service date.sh
     Loaded: loaded (/home/usradmin/.config/systemd/user/date.service; disabled; preset: disabled)
     Active: inactive (dead)

Systemdを使用してUnitを実行する!

作成したUnitをSystemdを使用して実行します。

$ systemctl --user start date.service
$ systemctl --user status date.service
○ date.service - Date Service
     Loaded: loaded (/home/usradmin/.config/systemd/user/date.service; disabled; preset: disabled)
     Active: inactive (dead)

Sep 19 06:17:54 vmsrhe21.loc.lab4ict.com systemd[2144]: Starting Date Service...
Sep 19 06:17:54 vmsrhe21.loc.lab4ict.com systemd[2144]: Finished Date Service.

実行時間がファイルに記録されていることを確認します。

$ cat ~/data/date.txt 
Tue Sep 19 06:17:54 AM JST 2023

Unitをタイマー起動する!

作成したUnitを1分おきに実行してみます。タイマー用のUnitファイルを作成します。タイマー用のUnitは、実行用のUnitファイルと名前を合わせます。今回は、「date.timer」になります。

$ cat ~/.config/systemd/user/date.timer
[Unit]
Description=timer date.sh

[Timer]
OnCalendar=*:0/1

作成したタイマーを起動する!

作成したタイマーを起動します。

$ systemctl --user start date.timer 
$ systemctl --user status date.timer 
● date.timer - timer date.sh
     Loaded: loaded (/home/usradmin/.config/systemd/user/date.timer; static)
     Active: active (waiting) since Tue 2023-09-19 06:51:00 JST; 3s ago
      Until: Tue 2023-09-19 06:51:00 JST; 3s ago
    Trigger: Tue 2023-09-19 06:52:00 JST; 55s left
   Triggers: ● date.service

Sep 19 06:51:00 vmsrhe21.loc.lab4ict.com systemd[2144]: Started timer date.sh.

おわりに

Systemdを使用して、ユーザ権限でファイルを実行する方法を確認しました。もちろん、コマンドのみの実行も可能です。タイマー実行する方法も確認しました。

参考情報

関連記事