論争が耐えないsystemdですが、そろそろ諦めて使わざるを得ないですね。
ということで、設定メモを残しておきます。
systemdとは
/etc/init.d/に呪文のようなスクリプトを置くのはもう嫌だ!と思って作ったらしいです。(systemd - ウィキペディア)
なので、systemdを利用しているここ5年ぐらいのディストリビューションは/etc/init.d/配下にファイルがほとんどありません。(networkぐらいじゃないかな。)
amazon linuxも2からsystemdが標準になっています。
/etc/init.d/にいた猛者たちはどこにいったのかというと、/usr/lib/systemd/ と /etc/systemd/system/ にいます。
[murata@coinpedia-api-ap01 ~]$ cat /etc/system-release
Amazon Linux 2
[murata@coinpedia-api-ap01 ~]$ ll /etc/init.d/
total 40
lrwxrwxrwx 1 root root 54 Jun 23 07:45 cfn-hup -> ../../../opt/aws/apitools/cfn-init/init/redhat/cfn-hup
-rw-r--r-- 1 root root 17500 May 3 2017 functions
-rwxr-xr-x 1 root root 4334 May 3 2017 netconsole
-rwxr-xr-x 1 root root 7293 May 3 2017 network
-rw-r--r-- 1 root root 1160 May 4 08:31 README
[murata@coinpedia-api-ap01 ~]$ ll /usr/lib/systemd/
total 7748
drwxr-xr-x 2 root root 162 Jun 23 07:45 catalog
-rw-r--r-- 1 root root 9551 May 4 08:31 import-pubring.gpg
drwxr-xr-x 2 root root 29 Jun 23 07:45 ntp-units.d
-rwxr-xr-x 1 root root 1351 May 3 2017 rhel-autorelabel
-rwxr-xr-x 1 root root 399 May 3 2017 rhel-configure
-rwxr-xr-x 1 root root 110 May 3 2017 rhel-dmesg
-rwxr-xr-x 1 root root 599 Oct 20 2017 rhel-dmraid-activation
~snip;
[murata@coinpedia-api-ap01 ~]$ ll /etc/systemd/system/
total 12
drwxr-xr-x 2 root root 119 Jun 23 07:45 cloud-init.target.wants
lrwxrwxrwx 1 root root 40 Jun 23 07:45 default.target -> /usr/lib/systemd/system/graphical.target
drwxr-xr-x 2 root root 87 Jun 23 07:45 default.target.wants
-rw-r--r-- 1 root root 327 Sep 6 16:52 geth.service
-rw-r--r-- 1 root root 316 Sep 6 16:49 geth.service~
drwxr-xr-x 2 root root 32 Jun 23 07:45 getty.target.wants
drwxr-xr-x 2 root root 4096 Sep 6 16:52 multi-user.target.wants
drwxr-xr-x 2 root root 31 Jun 23 07:45 remote-fs.target.wants
drwxr-xr-x 2 root root 51 Jun 23 07:45 sockets.target.wants
drwxr-xr-x 2 root root 122 Jun 23 07:45 sysinit.target.wants
drwxr-xr-x 2 root root 44 Jun 23 07:45 system-update.target.wants
使い方は?
プロセス
systemctlコマンド使うよ。status, start, enable, disableあたりがよく使う。
chkconfigとserviceコマンドが合わさった感じだね。
サブコマンドとサービス名の順番がいつも逆な気がしていつも苛つくね。
[murata@coinpedia-api-ap01 ~]$ sudo systemctl status sshd.service
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2018-09-05 16:57:18 JST; 24h ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 3288 (sshd)
CGroup: /system.slice/sshd.service
└─3288 /usr/sbin/sshd -D
Sep 06 16:10:15 coinpedia-api-ap01 sshd[14174]: Received disconnect from 118.123.15.142 port 53944:11: [preauth]
Sep 06 17:00:33 coinpedia-api-ap01 sshd[14716]: Invalid user admin from 37.20.235.105 port 46350
Sep 06 17:00:33 coinpedia-api-ap01 sshd[14716]: input_userauth_request: invalid user admin [preauth]
Sep 06 17:00:34 coinpedia-api-ap01 sshd[14716]: Connection closed by 37.20.235.105 port 46350 [preauth]
Sep 06 17:00:41 coinpedia-api-ap01 sshd[14718]: Invalid user admin from 203.190.148.234 port 45566
Sep 06 17:00:41 coinpedia-api-ap01 sshd[14718]: input_userauth_request: invalid user admin [preauth]
Sep 06 17:00:41 coinpedia-api-ap01 sshd[14718]: Connection closed by 203.190.148.234 port 45566 [preauth]
Sep 06 17:00:46 coinpedia-api-ap01 sshd[14720]: Invalid user admin from 90.151.237.80 port 40770
Sep 06 17:00:46 coinpedia-api-ap01 sshd[14720]: input_userauth_request: invalid user admin [preauth]
Sep 06 17:00:46 coinpedia-api-ap01 sshd[14720]: Connection closed by 90.151.237.80 port 40770 [preauth]
ログ
ログを確認するにはjournalctlコマンドを使うよ。
これだけ覚えておけばよさそう。tailしてくれるよ。 [root@coinpedia-api-ap01 murata]# journalctl -u [ユニット名] -xf
[root@coinpedia-api-ap01 murata]# journalctl -u sshd.service -xf
-- Logs begin at Thu 2018-08-16 18:05:25 JST. --
Sep 06 17:00:33 coinpedia-api-ap01 sshd[14716]: input_userauth_request: invalid user admin [preauth]
Sep 06 17:00:34 coinpedia-api-ap01 sshd[14716]: Connection closed by 37.20.235.105 port 46350 [preauth]
Sep 06 17:00:41 coinpedia-api-ap01 sshd[14718]: Invalid user admin from 203.190.148.234 port 45566
Sep 06 17:00:41 coinpedia-api-ap01 sshd[14718]: input_userauth_request: invalid user admin [preauth]
Sep 06 17:00:41 coinpedia-api-ap01 sshd[14718]: Connection closed by 203.190.148.234 port 45566 [preauth]
一覧
動いているサービス: systemctl list-units --type=service
全部: systemctl list-unit-files --type=service
あんまり使わないから覚えられないね。毎回ググるね。
登録(serviceしか使ったことない)
手動で登録するには、/etc/systemd/system/xxxxx.serviceとかってファイルを置けばOKだよ。
ファイルをおいた時点で、 sudo systemctl status test-deroris.service とかで確認ができる状態になるよ。
❯ cat /etc/systemd/system/test-derori.service
[Unit]
Description=test daemon
ConditionPathExists=/tmp/testdaemon
After=network.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/tmp/testdaemon
PermissionsStartOnly=true
[Install]
WantedBy=multi-user.target
起動の順番とか、落ちてたら勝手にリスタートするとかそーいうのも定義できる。/etc/init.d/よりだいぶ見やすいね。(逆に無限再起動に気づかない可能性に注意して!)
全部覚えるのは無理だから似たようなサービスのファイルをコピって使うといいよ。
参考
ココを見れば一発だね。
日本語のわかりやすい記事: https://qiita.com/a_yasui/items/f2d8b57aa616e523ede4
公式サイト: https://www.freedesktop.org/wiki/Software/systemd/
systemd-ask-password
デーモンを起動させるのにパスワードが必要な場合、systemd-ask-password というコマンドを使うと、別ttyからパスワードを持ってこれるよ。
sudo 権限を与えたくない場合とか、起動したいデーモンがパスワードを要求してくる場合に利用できるよ。(セキュリティに注意)
こんな感じで使う。
# !/bin/bash -e
pass=$(systemd-ask-password --keyname=passphrase 'Enter passphrase:')
echo $pass # $passに入力したパスワードが入ってる。