How to automatically restart a linux background process if it fails?
Solution 1:
The easiest way would be to add it to /etc/inittab, which is designed to do this sort of thing:
respawn If the process does not exist, start the process. Do not wait for its termination (continue scanning the /etc/inittab file). Restart the process when it dies. If the process exists, do nothing and continue scanning the /etc/inittab file.
For example, you could do this:
# Run my stuff
myprocess:2345:respawn:/bin/myprocess
Solution 2:
Buildroot has three possible init systems, so there are three ways to do this:
BusyBox init
With this, one adds an entry to /etc/inittab
.
::respawn:/bin/myprocess
Note that BusyBox init
has an idiosyncratic /etc/inittab
format. The second field is meaningless, and the first field is not an ID but a device basename.
Linux "System V" init
Again, one adds an entry to /etc/inittab
.
myprocess:2345:respawn:/bin/myprocess
systemd
One writes a unit file in, say, /etc/systemd/system/myprocess.service
:
[Unit]
Description=My Process
[Service]
ExecStart=/bin/myprocess
Restart=always
[Install]
WantedBy=multi-user.target
Enable this to autostart at bootup with:
systemctl enable myprocess.service
Start it manually with:
systemctl start myprocess.service
Further reading
- "3.1.3 init system". The Buildroot user manual.