I have a simple script "start.sh", which I want to make it auto-boot every time, when ubuntu 16.04 restarts.
I followed this post: https://serverfault.com/questions/773162/i-cant-get-the-right-items-to-boot-on-ubuntu-16-04-and-systemd
And make this simple script: https://github.com/kenpeter/test_run_at_boot
I put it in here.
/lib/systemd/system/test_run_at_boot.service
I have it linked
/etc/systemd/system/multi-user.target.wants/test_run_at_boot.service -> /lib/systemd/system/test_run_at_boot.service
Every time I reboot my machine, it is not starting.
I also try to attach the actual command to test_run_at_boot.service, still not working.
[Unit]
Description=test_run_at_boot
[Service]
ExecStart=forever start -a -l forever.log -o out.log -e err.log /home/ubuntu/misc/service/test_run_at_boot/test_run_at_boot.js
[Install]
WantedBy=multi-user.target
Update
In syslog, I got this. /usr/bin/env: 'node': No such file or directory
This causes the script fails at start.
Aug 5 06:45:23 xyz start.sh[1557]: /usr/bin/env: ‘node’: No such file or directory
Aug 5 06:45:23 xyz systemd[1]: Starting LSB: Record successful boot for GRUB...
Aug 5 06:45:23 xyz acpid: starting up with netlink and the input layer
Aug 5 06:45:23 xyz acpid: 1 rule loaded
Aug 5 06:45:23 xyz acpid: waiting for events: event logging is off
Aug 5 06:45:23 xyz systemd[1]: Started D-Bus System Message Bus.
Aug 5 06:45:23 xyz dbus[1590]: [system] AppArmor D-Bus mediation is enabled
Aug 5 06:45:23 xyz systemd[1]: Started Cgroup management daemon.
Aug 5 06:45:23 xyz systemd[1]: Starting Thermal Daemon Service...
Aug 5 06:45:23 xyz systemd[1]: Started FUSE filesystem for LXC.
Aug 5 06:45:23 xyz systemd[1]: Starting Restore /etc/resolv.conf if the system crashed before the ppp link was shut down...
Aug 5 06:45:23 xyz lxcfs[1624]: hierarchies: 0: memory
Aug 5 06:45:23 xyz lxcfs[1624]: 1: blkio
Aug 5 06:45:23 xyz lxcfs[1624]: 2: hugetlb
Aug 5 06:45:23 xyz lxcfs[1624]: 3: cpuset
Aug 5 06:45:23 xyz lxcfs[1624]: 4: freezer
Aug 5 06:45:23 xyz lxcfs[1624]: 5: net_cls,net_prio
Aug 5 06:45:23 xyz lxcfs[1624]: 6: pids
Aug 5 06:45:23 xyz lxcfs[1624]: 7: devices
Aug 5 06:45:23 xyz lxcfs[1624]: 8: cpu,cpuacct
Aug 5 06:45:23 xyz lxcfs[1624]: 9: perf_event
Aug 5 06:45:23 xyz lxcfs[1624]: 10: name=systemd
Aug 5 06:45:23 xyz systemd[1]: Starting System Logging Service...
Aug 5 06:45:23 xyz systemd[1]: Started Snappy daemon.
Aug 5 06:45:23 xyz systemd[1]: Started Regular background program processing daemon.
Aug 5 06:45:23 xyz cron[1648]: (CRON) INFO (pidfile fd = 3)
Aug 5 06:45:23 xyz systemd[1]: Starting Accounts Service...
Aug 5 06:45:23 xyz cron[1648]: (CRON) INFO (Running @reboot jobs)
Aug 5 06:45:23 xyz systemd[1]: Starting Login Service...
Aug 5 06:45:23 xyz systemd[1]: Starting LXD - container startup/shutdown...
Aug 5 06:45:23 xyz systemd[1]: Started System Logging Service.
Aug 5 06:45:23 xyz systemd[1]: test_run_at_boot.service: Main process exited, code=exited, status=127/n/a
Aug 5 06:45:23 xyz systemd[1]: test_run_at_boot.service: Unit entered failed state.
Aug 5 06:45:23 xyz systemd[1]: test_run_at_boot.service: Failed with result 'exit-code'.
Update 1
I follow this post
https://patrakov.blogspot.com.au/2011/01/writing-systemd-service-files.html
I made some changes
https://github.com/kenpeter/test_run_at_boot/blob/master/test_run_at_boot.service
It is able to start the service after reboot, but after 1 - 2 mins, the service disappear. See below.
ubuntu@xyz:~$ ps aux | grep test
root 2155 0.3 3.8 942196 38780 ? Ssl 13:04 0:00 /home/ubuntu/.nvm/versions/node/v6.3.1/bin/node /home/ubuntu/.nvm/versions/node/v6.3.1/lib/node_modules/forever/bin/monitor /home/ubuntu/misc/service/test_run_at_boot/test_run_at_boot.js
ubuntu 3223 0.0 0.1 12944 1092 pts/0 S+ 13:05 0:00 grep --color=auto test
ubuntu@xyz:~$ cd misc/
ubuntu@xyz:~/misc/service/test_run_at_boot$ ls
err.log node_modules out.log package.json start.sh stop.sh test_run_at_boot.js test_run_at_boot.service
ubuntu@xyz:~/misc/service/test_run_at_boot$ ps aux | grep test
ubuntu 3240 0.0 0.0 12944 1012 pts/0 S+ 13:05 0:00 grep --color=auto test
ubuntu@xyz:~/misc/service/test_run_at_boot$
Update 2
In syslog
Aug 6 01:24:22 xyz start.sh[1663]: warn: --minUptime not set. Defaulting to: 1000ms
Aug 6 01:24:22 xyz start.sh[1663]: warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms
Aug 6 01:24:22 xyz start.sh[1663]: info: Forever processing file: /home/ubuntu/misc/service/test_run_at_boot/test_run_at_boot.js
Aug 6 01:24:22 xyz systemd[1]: test_run_at_boot.service: PID 3347 read from file /home/ubuntu/misc/service/test_run_at_boot/test_run_at_boot.pid does not exist or is a zombie.
....
....
Aug 6 01:24:55 xyz systemd[1]: Started Execute cloud user/final scripts.
Aug 6 01:24:55 xyz systemd[1]: Reached target Cloud-init target.
Aug 6 01:25:00 xyz ntpdate[2709]: adjust time server 91.189.91.157 offset 0.104466 sec
Aug 6 01:25:51 xyz systemd[1]: test_run_at_boot.service: Start operation timed out. Terminating.
Aug 6 01:25:51 xyz systemd[1]: Failed to start test_run_at_boot.
Aug 6 01:25:51 xyz systemd[1]: test_run_at_boot.service: Unit entered failed state.
Aug 6 01:25:51 xyz systemd[1]: test_run_at_boot.service: Failed with result 'timeout'.
Using forever under systemd is a bit like using forever to run forever.
Without forever, the systemd config becomes simpler.
[Unit]
Description=test_run_at_boot
[Service]
ExecStart=/usr/bin/nodejs /home/ubuntu/misc/service/test_run_at_boot/test_run_at_boot.js
Type=oneshot
#Restart=on-failure
[Install]
WantedBy=multi-user.target
The test script you are using is a Type=oneshot
as the script is expected to exit, otherwise systemd will report the service as failed. Once you have a long running service to manage you can remove Type=oneshot
and use Restart=on-failure
to keep the service up, like forever does.
stderr
and stdout
from the process are sent to the systemd journal. On Ubuntu this goes to syslog.
If there are features of forever you really need, then systemd requires a bit more setup. The Type
becomes forking
. You will need to setup a --pidFile
and have a matching systemd PIDFile=
as well.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.