アプリケーションサーバーがダウンしたりシステムが再起動されたらすぐに起動するための systemd スクリプト

アプリケーションサーバーがダウンしたりシステムが再起動されたらすぐに起動するための systemd スクリプト

以下に示すような Upstart 構成ファイルがあり、これは Ubuntu 14 で正常に動作します。

#/etc/init/data_server.conf
#sudo start data_server
#sudo stop data_server
#sudo status data_server

start on runlevel [2345]
stop on runlevel [016]

chdir /opt/hold/data_server
respawn

post-start script
    echo "data server started at `date +"%F %T"` on `hostname -f`" | mailx -r "[email protected]" -s "data server Started" "[email protected]"
end script

post-stop script
  sleep 30
end script

limit core unlimited unlimited
limit nofile 100000 100000
setuid goldy
exec ./data_server --init_file=../config/tree.init --port=8080 --dir=/data/hold/ --max_sec=2400 --max_mb=100 --active=5

現在、Ubuntu 16 に移行しているため、 を使用できなくなりupstart、ここで を使用する必要があるようですsystemd。 でスクリプトを記述するには、どのような変更が必要ですかsystemd?

systemdシステムが再起動されるか、アプリが終了されるたびに、スクリプトが自動的に起動され、その結果、 が起動されるようにする必要がありますdata server

答え1

Upstart スクリプトは大幅に変更されます。多くのディレクティブを手動で指定する必要はないので、スクリプトも大幅に短くなります。

プロセスをブート時に常に開始し、クラッシュしたときに再起動するには、次の 1 行を記述するだけです。

Restart=always

どのくらいのカスタム変更を保持する必要があるかはわかりませんが、最低限、chdirおよびexecコマンドは保持する必要があるようです。

以下は、アプリの基本的な systemd スクリプトの例です。

[Unit]
Description=My-service

[Service]
Type=simple
WorkingDirectory=/opt/hold/data_server
ExecStart=/path/to/data_server --init_file=../config/tree.init --port=8080 --dir=/data/hold/ --max_sec=2400 --max_mb=100 --active=5
Restart=always

[Install]
WantedBy=multi-user.target

カスタム ユニット ファイルを作成するときに、これが便利なリソースであることがわかりました。https://www.freedesktop.org/software/systemd/man/systemd.unit.html

関連情報