systemd

サービスの管理はsystemdが行うので、これを押さえておく必要がある。sshdやnginx、prosodyとかも皆サービスである。

独自のサービスを作成する

/etc/systemd/systemfoo.serviceという名前でUnitファイルを作る。

 1 [Unit]
 2 Description=Foo Service
 3 
 4 [Service]
 5 Type=simple
 6 Restart=always
 7 ExecStart=/home/user1/foo.sh
 8 
 9 [Install]
10 WantedBy=multi-user.target

より短い例。

1 [Unit]
2 Description=Foo Service
3 
4 [Service]
5 ExecStart=/home/moli/Desktop/foo.sh
6 
7 [Install]
8 WantedBy=multi-user.target

Description=は識別子なので独自のものを。

Type=は通常simpleでよい。(デフォルトsimple)

Restart=はプロセスが終了した時に再起動するかどうかを指定する。デフォルトはno。普通はalwaysを選択することになるだろう。

ExecStartは実行される引数付きのコマンド。

WantedBy=はランレベル。multi-user.targetでいいだろう。ターゲットは/usr/lib/systemd/system/multi-user.targetのようになっている。

systemctl daemon-reloadでサービスの設定ファイルを再読み込みする

systemctl

システムの状態を表示
sudo systemctl status
失敗したサービスを表示
sudo systemctl --failed
サービスを起動
sudo systemctl start foo.service
サービスを停止
sudo systemctl stop foo.service
サービスの状態を表示
sudo systemctl status foo.service
サービスを自動起動に設定
sudo systemctl enable foo.service
サービスの自動起動を無効
sudo systemctl disable foo.service
Unitファイルのバックアップファイルを表示
sudo systemctl cat foo.service

journalctl

ログを表示する。

-x
メッセージカタログでログを拡張する
-e
ページャの末尾にジャンプする
-u unit
指定されたunitに一致するメッセージを表示する
-t identifier
識別子でフィルタリングする(systemd-catのメッセージをフィルタするのに使える)

単にjournalctlとすると全てのログが表示されるので、grepなりなんなりで表示を絞り込んでもいい。

systemd-cat

ジャーナルに直接メッセージを送ることができる。

-t identifier
識別子を指定する。指定しないと実行ファイル名になる
1 systemd-cat -t FOO echo hello