Systemd
systemd 服務不會啟動 nodejs
我正在嘗試讓我的 nodejs 應用程序在啟動時啟動。如果我以使用者 odroid 的身份從命令行啟動它,它執行良好。
這是我的服務文件:
[Unit] Description=ProImage After=network.target mysql.service [Service] ExecStart=/bin/node /proimage/app.js Restart=on-failure RootDirectory=/proimage WorkingDirectory=/proimage User=root [Install] WantedBy=multi-user.target
當我執行時:
sudo systemctl status proimage_daemon
我得到:
odroid@odroid:~$ 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 /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
它給了我以下相同的資訊:
odroid@odroid:~$ 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.
我看過十幾個關於這個問題的文章。他們都說 status=200/CHDIR 表示工作目錄有問題。
就我而言,工作目錄肯定存在,並且歸根使用者所有。我已經在這個目錄上遞歸地設置了 777 的權限。我用服務文件嘗試了很多不同的東西,但都無濟於事。
有人對我的問題有什麼建議嗎?
根據systemd exec 文件,設置
RootDirectory
類似於 chroot。結合設置WorkingDirectory
,這意味著 systemd 正在將您的應用程序 chroot 到/proimage
,然後在該目錄中嘗試到cd /proimage
,這將轉換為/proimage/proimage
.如果您不需要 chroot 程序,請刪除該
RootDirectory
指令。如果您打算對程序進行 chroot,請刪除該WorkingDirectory
指令。