当前位置: 首页 > >

linux进程挂掉 自动启动,配置systemd以在Linux崩溃后自动启动服务

发布时间:

本文介绍配置systemd以在Linux崩溃后自动启动服务的方法。进程在Linux系统上崩溃的原因有很多,你可以调查并解决问题,但可能需要一段时间。但是你可以立即将服务恢复到联机状态的一件事是在服务中断时自动启动,这会减少停机时间以获得更好的可用性,它确保你的服务始终可供用户访问。在systemd系统上自动执行此操作非常容易,因为systemd具有启用此功能的选项。可以先参考Bash脚本:实现在Linux上关闭时自动启动服务。



什么是systemd?


Systemd是一个新的init系统和系统管理器,它通过传统的SysV init系统实现/适用于所有主要的Linux发行版。systemd与SysV和LSB init脚本兼容,它可以作为sysvinit系统的直接替代品。systemd是内核启动并保持PID 1的第一个进程。systemctl是命令行实用程序和主要工具,用于管理systemd守护程序/服务,例如启动、重新启动、停止、启用、禁用、重新加载和状态,参考Systemd入门教程。


systemd使用.service文件而不是bash脚本(SysV init使用),systemd将所有守护进程排序到他们自己的Linux cgroup中,你可以通过浏览/cgroup/systemd文件来查看系统层次结构。


systemd服务文件有三个主要部分,我们需要在[Service] potion下添加以下必需参数:


[Unit]


...


[Service]


Restart=on-failure


RestartSec=5s


...


[Install]


...


相关说明:


Restart:配置在服务进程退出,终止或超时时是否应重新启动服务。


on-failure:如果设置为on-failure,则当进程以非零退出代码退出,由信号终止,当操作(例如服务重新加载)超时,以及何时触发配置的监视程序超时时,将重新启动服务。


RestartSec:配置重新启动服务之前的休眠时间,以秒为单位获取无单位值,或以“5分20秒”为单位获取时间跨度值,默认为100毫秒。


5s:等待5秒然后启动服务。


如何在systemd系统中添加自动启动服务参数?


添加这些参数并不是什么大问题,为此,请打开相应的服务文件并附加以下参数。


为了解释这一点,我们将测试httpd服务,我们看看这个:


# vi /etc/systemd/system/multi-user.target.wants/httpd.service


[Unit]


Description=Apache Web Server


After=network.target remote-fs.target nss-lookup.target


[Service]


Type=simple


ExecStart=/usr/bin/httpd -k start -DFOREGROUND


ExecStop=/usr/bin/httpd -k graceful-stop


ExecReload=/usr/bin/httpd -k graceful


PrivateTmp=true


LimitNOFILE=infinity


KillMode=mixed


Restart=on-failure


RestartSec=5s


[Install]


WantedBy=multi-user.target


进行更改后,需要重新加载守护程序服务,可以通过运行“systemctl status [httpd]”命令来查看相同内容,如下所示。


同时会有重要信息标记以便更好地理解,此外,Apache httpd Web服务器在27分钟前启动:


# systemctl status httpd



只需重新加载守护进程服务即可:


# systemctl daemon-reload


可以通过再次运行以下命令来验证它:


# systemctl status httpd



要进行此实验,请使用pidof命令查找进程的PID:


# pidof httpd


14429 14428 14427 14426 14425 14424


获得PID信息后,只需使用以下命令一次性将它们全部删除即可,Linux中有许多命令可以杀死进程ID(PID):


# kill -9 14429 14428 14427 14426 14425 14424


一旦你去掉了httpd PID,只需运行以下命令即可查看状态,它显示服务正在自动*簦


# systemctl status httpd



让我再次运行上面的命令,看看结果如何,以下显示现在正在运行,它按预期运行。


它是在564毫秒之前开始的:


# systemctl status httpd



注:可以根据需要为任何服务完成。


相关主题



友情链接: