LoginSignup
0
0

More than 3 years have passed since last update.

馬鹿の一つ覚え: systemd

Last updated at Posted at 2019-03-30

systemdの使い方

シェルスクリプトを用意し、Unit定義ファイルを作成、自動起動設定をする。
CentOS 7, CentOS 8, Ubuntu 18, openSUSE 42 いずれも設定方法は同じだった。

# ls -l /usr/local/tmp/foo.sh 
-rwxr-xr-x 1 root root 66 Mar 30 21:07 /usr/local/tmp/foo.sh
# cat /usr/local/tmp/foo.sh
#!/bin/sh
while true
do
  date >> /tmp/date.txt
  sleep 2000
done
# vi /etc/systemd/system/foo.service    # Unit定義ファイルを作成
# ls -l /etc/systemd/system/foo.service
-rw-r--r-- 1 root root 244 Mar 30 21:15 /etc/systemd/system/foo.service
# cat /etc/systemd/system/foo.service    # フォーマットやスペリングを間違えないように
[Unit]
Description = test systemd with date
After = network.target
[Service]
ExecStart = /usr/local/tmp/foo.sh
Restart = always
RestartSec = 16
Type = simple
StandardOutput = syslog
StandardError = syslog
[Install]
WantedBy = multi-user.target
# systemctl list-unit-files --type=service | grep foo    # disabled 表示
foo.service                                   disabled
# systemctl enable foo    # 自動起動設定
Created symlink from /etc/systemd/system/multi-user.target.wants/foo.service to /etc/systemd/system/foo.service.
# systemctl is-enabled foo
enabled
# systemctl status foo
# systemctl start foo
# ls -l /tmp/date.txt 
-rw-r--r-- 1 root root 29 Mar 30 23:28 /tmp/date.txt
# ps -ef | grep foo | grep sh
root     27352     1  0 23:28 ?        00:00:00 /bin/sh /usr/local/tmp/foo.sh
# systemctl stop foo
# ps -ef | grep foo | grep sh
# sync
# shutdown -r now
# ls -l /tmp/date.txt
-rw-r--r-- 1 root root 58 Mar 30 23:32 /tmp/date.txt
# ps -ef | grep foo | grep sh    # 自動起動を確認
root     20644     1  0 23:32 ?        00:00:00 /bin/sh /usr/local/tmp/foo.sh
# kill 20644    # Restart = always なのでkillしても起動
# ls -l /tmp/date.txt
-rw-r--r-- 1 root root 87 Mar 30 23:34 /tmp/date.txt
# ps -ef | grep foo | grep sh
root     26807     1  0 23:34 ?        00:00:00 /bin/sh /usr/local/tmp/foo.sh
# systemctl stop foo    # 停止
# ps -ef | grep foo | grep sh
# systemctl status foo
# less -S /var/log/messages    # syslogに出力するように設定しているので確認

非推奨 /etc/rc.d/rc.local

ついでに、非推奨ではあるがCentOS 7では /etc/rc.d/rc.local が利用できるので、動作確認を行ってみる。

# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core) 
# ls -ld /etc/rc*    # シンボリックリンクが張られている
drwxr-xr-x. 10 root root 118 Mar 11 15:32 /etc/rc.d
lrwxrwxrwx.  1 root root  13 Mar 11 15:32 /etc/rc.local -> rc.d/rc.local
lrwxrwxrwx.  1 root root  10 Mar 11 15:30 /etc/rc0.d -> rc.d/rc0.d
lrwxrwxrwx.  1 root root  10 Mar 11 15:30 /etc/rc1.d -> rc.d/rc1.d
lrwxrwxrwx.  1 root root  10 Mar 11 15:30 /etc/rc2.d -> rc.d/rc2.d
lrwxrwxrwx.  1 root root  10 Mar 11 15:30 /etc/rc3.d -> rc.d/rc3.d
lrwxrwxrwx.  1 root root  10 Mar 11 15:30 /etc/rc4.d -> rc.d/rc4.d
lrwxrwxrwx.  1 root root  10 Mar 11 15:30 /etc/rc5.d -> rc.d/rc5.d
lrwxrwxrwx.  1 root root  10 Mar 11 15:30 /etc/rc6.d -> rc.d/rc6.d
# cd /etc/rc.d/    # 実際にはこのディレクトリの中に
# ls -l
total 8
drwxr-xr-x. 2 root root 4096 Mar 12 16:06 init.d
-rw-r--r--. 1 root root  473 Oct 31 08:31 rc.local
drwxr-xr-x. 2 root root   74 Mar 12 16:07 rc0.d
drwxr-xr-x. 2 root root   74 Mar 12 16:07 rc1.d
drwxr-xr-x. 2 root root   74 Mar 13 10:25 rc2.d
drwxr-xr-x. 2 root root   74 Mar 13 10:25 rc3.d
drwxr-xr-x. 2 root root   74 Mar 13 10:25 rc4.d
drwxr-xr-x. 2 root root   74 Mar 13 10:25 rc5.d
drwxr-xr-x. 2 root root   74 Mar 12 16:07 rc6.d
# cat rc.local    # /etc/rc.d/rc.local ではなくsystemdを使うようにと書かれている
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

touch /var/lock/subsys/local
# vi rc.local    # 最終行にコマンドを書き込んでみる
# tail -n1 rc.local 
date > /tmp/date.txt
# chmod +x /etc/rc.d/rc.local
# sync
# shutdown -r now    # 再起動
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