Linuxでユニットファイルを作って自動起動させる
PHPのビルトインサーバとNode.js Express アプリケーション用のビルトインサーバのユニットファイルを作成して自動起動できるようにしました。
凝ったことをしないのであれば、service
ファイルを作成するだけでOKなので簡単です。
実行させるコマンドは以下です。
- PHP
php -S 0.0.0.0:8000 public/index.php -t public
- Node.js
node ./bin/www
service
ファイルに書くときは、 php
コマンドや node
コマンドをフルパスで書くと確実に動くので、パスを確認しておきます。
確認したら、service
ファイルを作ります。ファイル名はなんでもOKです。ここではphp.service
、nodejs.service
とします。
- /etc/systemd/system/php.service
[Unit]
Description = serve php
[Service]
ExecStart = /usr/bin/php -S 0.0.0.0:8000 public/index.php -t public
Restart = always
Type = simple
WorkingDirectory = /home/ec2-user/php-app
User = ec2-user
Group = ec2-user
[Install]
WantedBy = multi-user.target
- /etc/systemd/system/nodejs.service
[Unit]
Description = serve nodejs
[Service]
ExecStart = /home/ec2-user/.nvm/versions/node/v16.11.1/bin/node ./bin/www
Restart = always
Type = simple
WorkingDirectory = /home/ec2-user/nodejs-app
User = ec2-user
Group = ec2-user
[Install]
WantedBy = multi-user.target
WorkingDirectory
にアプリケーションのルートディレクトリを指定して ExecStart
にコマンドを指定します。他の項目については説明できないので各々で調べてください。
それでは、ビルトインサーバを起動しましょう
開始したら状態を確認します。以下のようになっていればOKです。
$ sudo systemctl status php
● php.service - serve php
Loaded: loaded (/etc/systemd/system/php.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2021-10-14 01:30:20 UTC; 1h 8min ago
Main PID: 10612 (php)
CGroup: /system.slice/php.service
└─10612 /usr/bin/php -S 0.0.0.0:8000 public/index.php -t public
$ sudo systemctl status nodejs
● nodejs.service - serve nodejs
Loaded: loaded (/etc/systemd/system/nodejs.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2021-10-14 02:16:43 UTC; 23min ago
Main PID: 8875 (node)
CGroup: /system.slice/nodejs.service
└─8875 /home/ec2-user/.nvm/versions/node/v16.11.1/bin/node ./bin/www
自動起動の設定をする場合は、以下コマンドを実行してください。