Ubuntu16.04あたりから導入されたSystemd
を使って、サーバー起動時にシェルを自動起動させる手順。
自動起動させるサンプルシェル
任意の場所にあるNode.jsのプログラムを起動させてみる。(通常はpm2を使うのがセオリーだが、適当なサンプルがないので)
> cd /home/hoge/sample
> vi start.sh
#!/bin/sh
cd /home/hoge/sample
node /home/hoge/sample/index.js
サービス化の手順
まず、定義ファイルを/lib/systemd/system
直下に作成する。名前はhoge.service
のように末尾が.service
になるようにする。
> cd /lib/systemd/system
> sudo vi hoge.service
最低限?必要な項目のみ記載する。(いろんな機能、振る舞いが定義できそうだが、一番シンプルなサービスになると思われる。
ExecStart
で実行するシェルを指定する。Type
もいろいろあるが、simpleでとりあえず定義する。
[Unit]
Description=demo sample node.js program
[Service]
Type=simple
ExecStart=/home/hoge/sample/start.sh
Restart=always
[Install]
WantedBy=multi-user.target
定義ファイルが作成できたら、以下のコマンドで認識されているか確認する。最初はDisableになっているはず。
> sudo systemctl list-unit-files --type=service | grep hoge
hoge.service disable
サービスを有効にする方法は以下のコマンド。有効になると、/etc/systemd/system
以下にhoge.serviceのシンボリックリンクが作成される。
> sudo systemctl enable hoge
逆に無効にしたい場合は、
> sudo systemctl disable hoge
サービスの開始とステータス確認は以下になる。
> sudo systemctl start hoge
> sudo systemctl status hoge
● hoge.service - demo sample node.js program
Loaded: loaded (/lib/systemd/system/hoge.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2018-08-07 06:28:14 UTC; 4s ago
Main PID: 2119 (start.sh)
Tasks: 7 (limit: 1026)
CGroup: /system.slice/hoge.service
├─2119 /bin/sh /home/hoge/sample/start.sh
└─2120 node index.js
あとは、この状態でマシンを再起動してしばらく経ったあとに自動的に目的のプログラムが自動起動していることを確認できればOK。