systemdの起動でハマった

systemdのエラー

Let’s Encryptの導入でsystemdを利用してHexoをdaemonとして起動しようとしました。
その際に解決に時間がかかるハマりどころがあったので忘れないように記載しておきます。

systemdの導入

はじめに/etc/systemd/system/hexo.serviceを作成します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[Unit]
Description=hexo
After=syslog.target network.target

[Service]
Type=simple
ExecStart=sudo /home/ec2-user/.anyenv/envs/nodenv/shims/hexo server -p 8080
WorkingDirectory=/home/ec2-user/blog
StandardOutput=syslog
StandardError=syslog
KillMode=process
Restart=always
User=ec2-user
Group=ec2-user
Environment=NODE_ENV=production

[Install]
WantedBy=multi-user.target

書き方はこちらを参考にしてください。

登録されたかどうかを確認します。

1
2
$ sudo systemctl list-unit-files --type=service | grep hexo
hexo.service disabled

大丈夫でした。

enableしてstartします。

1
2
3
4
5
6
$ sudo systemctl enable hexo
Created symlink from /etc/systemd/system/multi-user.target.wants/hexo.service to /etc/systemd/system/hexo.service.
$
$ sudo systemctl start hexo
Failed to start hexo.service: Unit is not loaded properly: Invalid argument.
See system logs and 'systemctl status hexo.service' for details.

起動に失敗しました。See system logs and 'systemctl status hexo.service' for details.と書いてあるので言われた通りにやってみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ sudo systemctl status hexo.service
● hexo.service - hexo
Loaded: error (Reason: Invalid argument)
Active: failed (Result: start-limit) since 水 2019-06-26 20:40:03 JST; 10 months 10 days ago
Main PID: 13043 (code=exited, status=2)

5月 07 01:04:35 ip-172-31-43-237.ap-northeast-1.compute.internal systemd[1]: [/etc/sy...
5月 07 01:04:35 ip-172-31-43-237.ap-northeast-1.compute.internal systemd[1]: hexo.ser...
5月 07 01:06:36 ip-172-31-43-237.ap-northeast-1.compute.internal systemd[1]: [/etc/sy...
5月 07 01:06:36 ip-172-31-43-237.ap-northeast-1.compute.internal systemd[1]: hexo.ser...
5月 07 01:07:03 ip-172-31-43-237.ap-northeast-1.compute.internal systemd[1]: [/etc/sy...
5月 07 01:07:03 ip-172-31-43-237.ap-northeast-1.compute.internal systemd[1]: hexo.ser...
5月 07 01:10:02 ip-172-31-43-237.ap-northeast-1.compute.internal systemd[1]: [/etc/sy...
5月 07 01:10:02 ip-172-31-43-237.ap-northeast-1.compute.internal systemd[1]: hexo.ser...
5月 07 01:10:18 ip-172-31-43-237.ap-northeast-1.compute.internal systemd[1]: [/etc/sy...
5月 07 01:10:18 ip-172-31-43-237.ap-northeast-1.compute.internal systemd[1]: hexo.ser...
Hint: Some lines were ellipsized, use -l to show in full.

全然わからない…

1
2
Loaded: error (Reason: Invalid argument)
Active: failed (Result: start-limit) since 水 2019-06-26 20:40:03 JST; 10 months 10 days ago

この辺がヒントといえばヒントなんだと思いますが、結果的にここに惑わされた形になりました。

全くヒントも掴めずに調べていると/var/log/messagesを見るとよいみたいなコメントを見つけました。なのでみてみると

1
May  7 01:04:35 ip-172-31-43-237 systemd: [/etc/systemd/system/hexo.service:7] Executable path is not absolute, ignoring: sudo /home/ec2-user/.anyenv/envs/nodenv/shims/hexo server -p 8080

めちゃくちゃわかりやすいメッセージが書かれています。
起動コマンドがsudoで始まっていて、それがが絶対パスではないので起動できてなかったようです。
なのでsudo/usr/bin/sudoに変更して問題なく起動しました。

まとめ

systemdのエラーは/var/log/messagesを見ること。