
フォローしてみました。このガイドノードアプリケーションをサービスとして実行します。しかし、終了コード127で始まらない。この問題を解決する方法はありますか?
これは日記です。
sudo journalctl --follow -u serviceName
-- Logs begin at Tue 2017-08-08 16:27:10 GMT. --
Aug 08 17:06:57 raspberrypi systemd[1]: Started serviceName.
Aug 08 17:06:57 raspberrypi app.js[7234]: [46B blob data]
Aug 08 17:06:57 raspberrypi systemd[1]: serviceName.service: main process exited, code=exited, status=127/n/a
Aug 08 17:06:57 raspberrypi systemd[1]: Unit serviceName.service entered failed state.
Aug 08 17:06:57 raspberrypi systemd[1]: serviceName.service holdoff time over, scheduling restart.
Aug 08 17:06:57 raspberrypi systemd[1]: Stopping serviceName...
Aug 08 17:06:57 raspberrypi systemd[1]: Starting serviceName...
Aug 08 17:06:57 raspberrypi systemd[1]: serviceName.service start request repeated too quickly, refusing to start.
Aug 08 17:06:57 raspberrypi systemd[1]: Failed to start serviceName.
Aug 08 17:06:57 raspberrypi systemd[1]: Unit serviceName.service entered failed state.
serviceName.serviceです。
[Unit]
Description=ServiceName
After=network.target
[Service]
ExecStart=/home/pi/projects/ServiceName/app.js
Restart=always
User=root
Group=root
Environment=PATH=/usr/bin:/usr/local/bin
Environment=NODE_ENV=production
WorkingDirectory=/home/pi/projects/ServiceName
[Install]
WantedBy=multi-user.target
これは私のapp.jsのトップです。
#!/usr/bin/env node
答え1
ExecStart=/home/pi/projects/ServiceName/app.js
systemd
自分で実行してもらいますapp.js
。このファイルを直接実行.js
できますか?それ以外の場合、シェルは終了コード127 - 「不明なコマンド」を生成します。
答え2
127はコマンドが見つかりません。
rootユーザーがノードバイナリにアクセスできることを確認してください。それ以外の場合は、次の行をノードをインストールしたユーザーに変更してください。
User=root
Group=root
そうでない場合は、以下を試してください
[Unit]
Description="ServiceName"
After=network.target
[Service]
ExecStart=path_to_node/node /home/pi/projects/ServiceName/app.js
Restart=always
# Restart service after 10 seconds if node service crashes
RestartSec=10
# Output to syslog
StandardOutput=syslog
StandardError=syslog
#Change this to find app logs in /var/log/syslog
SyslogIdentifier=nodejs-api
# Followig will require if you are using the PORT or Node from Envirnoment
Environment=NODE_ENV=production PORT=3000
[Install]
WantedBy=multi-user.target
サーバーシステムが稼働していてサーバーにアクセスできない場合は、次のコマンドを使用して/var/log/syslogのログを確認して問題を解決できます。
sudo grep "nodejs-api" /var/log/syslog
新兵:sudo systemctl ロケットの有効化
答え3
デバッグするには、次のコマンドを実行します(<>部分をシステムデバイスファイルの値に置き換えます)。
sudo runuser -l <User> -g <Group> -c "cd <WorkingDirectory> && <PATH> <ExecStart>"
問題は、User
設定した内容にアクセスできないことですExecStart
。PATH
それでも問題がある場合は、ステップバイステップのガイドを作成しました。デバッグシステム
答え4
こんにちは、興味のある方のために、私はこの問題に遭遇し、すべてを試しましたが、最終的にNode 6からNode 12にアップグレードして問題を解決しました。