Answers:
最简单的方法是将其添加到/ etc / inittab中,该文件旨在执行以下操作:
重新生成 如果该进程不存在,请启动该进程。不要等待其终止(继续扫描/ etc / inittab文件)。死后重新启动该进程。如果该进程存在,则不执行任何操作,然后继续扫描/ etc / inittab文件。
例如,您可以这样做:
# Run my stuff
myprocess:2345:respawn:/bin/myprocess
/etc/inittab
仅当您具有基于sysvinit的初始化系统时,该方法才有效(甚至存在)。对于暴发户和systemd,事实并非如此。您必须安装busybox(非常原始的shell会使sysadm进行繁琐的恢复任务,但是可以替换sysvinit兼容的initd)或sysvinit(这是化石)。在Docker容器中,只有第一个容器不会感到痛苦。
Buildroot有三种可能的初始化系统,因此可以通过三种方式进行:
init
这样,您就可以在中添加一个条目/etc/inittab
。
::respawn:/bin/myprocess
请注意,BusyBox init
具有特有的/etc/inittab
格式。第二个字段没有意义,第一个字段不是ID,而是设备的基本名称。
init
再次,将一个条目添加到中/etc/inittab
。
myprocess:2345:respawn:/bin/myprocess
systemd
例如,有人将单位文件写入/etc/systemd/system/myprocess.service
:
[Unit]
Description=My Process
[Service]
ExecStart=/bin/myprocess
Restart=always
[Install]
WantedBy=multi-user.target
启用此选项可在启动时使用以下命令自动启动:
systemctl enable myprocess.service
手动启动它:
systemctl start myprocess.service
service mything start
或service mything stop
不再....是有办法有两个最好的?即不可崩溃的sysvinit服务,但也可以通过“服务”使用它吗?
如果您不是超级用户或超级用户,并且您的Linux系统安装了Docker,则可以创建进程的docker映像,如果重新启动系统,则可以使用docker来重新启动进程。
档案:docker-compose.yml
version: "3"
services:
lserver:
image: your_docker_image:latest
ports:
- 8080:8080 # just use 8080 as an example
restart: always # this is where your process can be guaranteed to restart
要启动您的Docker容器,
docker-compose up -d
如果我不是系统的超级用户,我发现通过自动重启来处理我自己的进程很容易。
有关如何创建docker映像的示例示例,这是一个简单的示例:
文件:Dockerfile
FROM alpine:3.5
RUN apk update && apk upgrade && rm -rf /var/cache/apk/*
WORKDIR /app
COPY my-process-server /app
RUN ln -s /app/my-process-server /usr/local/bin/my-process-server
EXPOSE 8080
CMD ["my-process-server"]