GNU/Linux >> Linux の 問題 >  >> Linux

SystemdサービスはNodejsを起動しませんか?

nodejsアプリを起動時に起動させようとしています。コマンドラインからユーザーodroidとして起動すると、正常に動作します。

これが私のサービスファイルです:

[Unit]
Description=ProImage
After=network.target mysql.service

[Service]
ExecStart=/bin/node //eadn-wc01-5196795.nxedge.io/proimage/app.js
Restart=on-failure
RootDirectory=/proimage
WorkingDirectory=/proimage
User=root

[Install]
WantedBy=multi-user.target

実行すると:

sudo systemctl status proimage_daemon

取得:

[email protected]:~$ sudo systemctl status proimage_daemon
● proimage_daemon.service - ProImage
   Loaded: loaded (/lib/systemd/system/proimage_daemon.service; enabled; vendor preset: enabled)
   Active: inactive (dead) (Result: exit-code) since Tue 2019-02-26 09:45:30 EST; 6s ago
  Process: 30797 ExecStart=/bin/node //eadn-wc01-5196795.nxedge.io/proimage/app.js (code=exited, status=200/CHDIR)
 Main PID: 30797 (code=exited, status=200/CHDIR)

Feb 26 09:45:29 odroid systemd[1]: proimage_daemon.service: Unit entered failed state.
Feb 26 09:45:29 odroid systemd[1]: proimage_daemon.service: Failed with result 'exit-code'.
Feb 26 09:45:30 odroid systemd[1]: proimage_daemon.service: Service hold-off time over, scheduling restart.
Feb 26 09:45:30 odroid systemd[1]: Stopped ProImage.
Feb 26 09:45:30 odroid systemd[1]: proimage_daemon.service: Start request repeated too quickly.
Feb 26 09:45:30 odroid systemd[1]: Failed to start ProImage.

私は以下を使用してjournalctlを見てきました:

journalctl -u proimage_daemon.service

そしてそれは私に同じことを与えます:

[email protected]:~$ journalctl -u proimage_daemon.service --since 09:38
-- Logs begin at Tue 2019-02-26 09:02:47 EST, end at Tue 2019-02-26 10:02:34 EST. --
Feb 26 09:38:12 odroid systemd[1]: proimage_daemon.service: Trying to enqueue job proimage_daemon.service/stop/replace
Feb 26 09:38:12 odroid systemd[1]: proimage_daemon.service: Installed new job proimage_daemon.service/stop as 13040
Feb 26 09:38:12 odroid systemd[1]: proimage_daemon.service: Enqueued job proimage_daemon.service/stop as 13040
Feb 26 09:38:12 odroid systemd[1]: proimage_daemon.service: Job proimage_daemon.service/stop finished, result=done
Feb 26 09:38:12 odroid systemd[1]: Stopped ProImage ICU.
Feb 26 09:39:19 odroid systemd[1]: Started ProImage ICU.
Feb 26 09:39:19 odroid systemd[1]: proimage_daemon.service: Main process exited, code=exited, status=200/CHDIR
Feb 26 09:39:19 odroid systemd[1]: proimage_daemon.service: Unit entered failed state.
Feb 26 09:39:19 odroid systemd[1]: proimage_daemon.service: Failed with result 'exit-code'.
Feb 26 09:39:19 odroid systemd[1]: proimage_daemon.service: Service hold-off time over, scheduling restart.
Feb 26 09:39:19 odroid systemd[1]: Stopped ProImage ICU.

この問題に関する12件の投稿を見てきました。彼らは皆、status =200/CHDIRは作業ディレクトリに問題があることを示していると言っています。

私の場合、作業ディレクトリは間違いなく存在し、rootが所有しています。このディレクトリで再帰的に権限を777に設定しました。私はサービスファイルを使ってさまざまなことを試しましたが、まったく役に立ちませんでした。

誰かが私の問題が何であるかについて提案がありますか?

承認された回答:

systemd execのドキュメントに従って、RootDirectoryを設定します chrootに似ています。 WorkingDirectoryの設定と組み合わせて 、systemdがアプリを/proimageにchrootしていることを意味します 次に、そのディレクトリ内で試行します cd /proimageへ 、これは/proimage/proimageに変換されます 。

プロセスをchrootする必要がない場合は、RootDirectoryを削除します 指令。プロセスをchrootする場合は、WorkingDirectoryを削除してください。 ディレクティブ。

関連:Ssh – SSHアクセス試行のログ?
Linux
  1. Linuxsystemdに新しいサービスを追加する

  2. Centos – Systemdは開始直後にサービスを終了しますか?

  3. SteamはUbuntu16.04で起動しませんか?

  1. systemd サービスを停止する方法

  2. Systemd:After と Requires の両方を使用する

  3. systemd - サービスに複数の引数を与える

  1. systemdを使用してスタートアップを管理する

  2. トラブルシューティングツールとしてsystemdの使用を開始します

  3. systemd ソケットのアクティベーションと xinetd