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を使用して、ユーザ権限でファイルを実行する方法を確認しました。もちろん、コマンドのみの実行も可能です。タイマー実行する方法も確認しました。
参考情報
関連記事