Systemd からシェルを起動
~ Rocky Linux の起動プロセスにシェルを仕込む ~
2022-08-08 作成 福島
TOP > tips > systemd-shell

0. 設置要件

項目内容備考
OSRocky Linux release 9.0 (Blue Onyx)本稿記述時の最新版。Rocky は CentOS の後継。
SELinuxEnforcingSELinux は有効のままとする。
シェルファイル名autoexec.sh-
シェルファイル設置ディレクトリ/usr/bin/SELinux が有効の場合は設置ディレクトリが限られる。*1
サービス名autoexec-
ユニットファイル名autoexec.serviceファイル名を サービス名.service にする必要がある。
ユニットファイル設置ディレクトリ/etc/systemd/system/ユーザ用はここに置く。
*1「ポリシーを変更すれば···」とか言う人は分かっている人なので自由にやってください。


1. シェルスクリプトの作成

$ su
# vim /usr/bin/autoexec.sh
#!/bin/bash
touch /dev/shm/autoexec.txt
ここでは Shared memory に空のファイルを作成している。
RAM ディスクのようなもので、再起動時は自動的にクリアされる。
# chown root:root /usr/bin/autoexec.sh
# chmod 750 /usr/bin/autoexec.sh
# chcon -u system_u -r object_r -t bin_t /usr/bin/autoexec.sh
# ls -lZ /usr/bin/autoexec.sh
-rwxr-x---. 1 root root system_u:object_r:bin_t:s0 214  8月  8 18:42 /usr/bin/autoexec.sh


2. ユニットファイルの作成

# vim /etc/systemd/system/autoexec.service
[Unit]
Description=Example of automatic shell script execution by user.

[Service]
Type=forking
ExecStart=/usr/bin/autoexec.sh

[Install]
WantedBy=default.target
*2ExecStart= を上記で作成したシェルスクリプトのパスと合わせる。


3. 動作確認

# systemctl start autoexec.service
(何も表示されなければ OK)
# ls -l /dev/shm/autoexec.txt
-rw-r--r--. 1 root root 0  8月  8 20:14 /dev/shm/autoexec.txt


4. ユニットファイルの登録

# systemctl enable autoexec.service
Created symlink /etc/systemd/system/default.target.wants/autoexec.service → /etc/systemd/system/autoexec.service.
# systemctl daemon-reload

# systemctl status autoexec.service
○ autoexec.service - Example of automatic shell script execution by user.
     Loaded: loaded (/etc/systemd/system/autoexec.service; enabled; vendor preset: disabled)
     Active: inactive (dead) since Fri 2022-08-08 20:14:01 JST; 54s ago
    Process: 4252 ExecStart=/usr/bin/autoexec.sh (code=exited, status=0/SUCCESS)
        CPU: 2ms

 8月  8 20:14:01 localhost.localdomain systemd[1]: Starting Example of automatic shell script execution by user....
 8月  8 20:14:01 localhost.localdomain systemd[1]: autoexec.service: Deactivated successfully.
 8月  8 20:14:01 localhost.localdomain systemd[1]: Started Example of automatic shell script execution by user..


5. 再起動

# shutdown -r now

Rocky Linux を再起動し、上記「3. 動作確認」と同様のファイルが作成されていれば完了とする。
(当然、ファイルの作成日時は異なる)