Saya mencoba membuat aplikasi nodejs saya untuk memulai saat boot. Ini berjalan dengan baik jika saya memulainya dari baris perintah sebagai pengguna odroid.
Ini file layanan saya:
[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
Saat saya menjalankan:
sudo systemctl status proimage_daemon
Saya mendapatkan:
[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.
Saya telah melihat journalctl menggunakan:
journalctl -u proimage_daemon.service
dan itu memberi saya hal yang sama sebagai berikut:
[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.
Saya telah melihat selusin posting tentang masalah ini. Mereka semua mengatakan status=200/CHDIR menunjukkan masalah dengan direktori kerja.
Dalam kasus saya, direktori kerja pasti ada dan dimiliki oleh root. Saya telah mengatur izin ke 777 secara rekursif di direktori ini. Saya sudah mencoba banyak hal berbeda dengan file layanan, semuanya tidak berhasil.
Adakah yang punya saran tentang apa yang mungkin menjadi masalah saya?
Jawaban yang Diterima:
Per dokumentasi exec systemd, atur RootDirectory
mirip dengan chroot. Dalam kombinasi dengan pengaturan WorkingDirectory
, itu berarti systemd sedang chroot aplikasi Anda ke /proimage
dan kemudian mencoba di dalam direktori itu ke cd /proimage
, yang akan diterjemahkan menjadi /proimage/proimage
.
Jika Anda tidak perlu melakukan proses chroot, hilangkan RootDirectory
pengarahan. Jika Anda ingin melakukan chroot proses, hilangkan WorkingDirectory
arahan.