如何在Linux中配置服务自动重启?

我必须和你谈谈这件事。
几年前,我帮助一位朋友在 Ubuntu 上安装了 Nginx。
那家伙一直说网站一直崩溃,重启有问题。
我用systemd来修复它。

首先需要确认Nginx是否受systemd控制。
我输入 systemctl list-unit-files |在终端中 grep nginx 并查看 nginx.service。
该文件通常位于 /etc/systemd/system/ 或 /lib/systemd/system/ 中,其名称为 nginx.service。

所以让它启动并自行启动。
我让他使用 sudo systemctl enable nginx。
输入命令后,看到/etc/systemd/system/中有一个nginx.service的软链接,它指向原始文件。
现在好多了,启动了 Nginx 并开始自己工作。

所以,最重要的是让服务在出现问题时自行重启。
我教他如何使用 sudo systemctl edit nginx。
系统会打开一个文件并在其中添加两句话:[Service],然后添加Restart=always和RestartSec=5 这意味着无论Nginx如何死掉,它都必须自己爬起来,并且要等待5 秒才能再次爬起来,以免停止后立即再次爬起来,系统会承受不住。

进行更改并保存后,您需要告诉 systemd 我进行了更改。
我让他输入 sudo systemctl daemon-reload。

最后还是要请他确认一下。
我只是使用 systemctl show nginx | grep -i restart,我看到 Restart=always 和 RestartSec=5 于是我让他手动停止,等几分钟然后让他检查systemctl nginx的状态。
他见状,自己站了起来!
后来他跑了一圈,说很有帮助。
不过,我提醒他不要盲目编辑/etc/systemd/system/中的原始文件。
编辑完成后,需要sudo systemctl daemon-reload。
万一Nginx实在是太糟糕了,我用journalctl -u nginx -b看看日志,一般都能找到问题所在。

看,用了几步systemd,服务稳定多了。
尝试一下,一定会成功的!

Linux如何设置服务开机自启 systemctl enable配置方法

说实话,systemctl用多了确实很好用,但是刚开始做的时候我很困惑。
记得第一次在服务器上启动Nginx并自动启动的时候,我只是把路径搞混了好久。
但一旦你了解了几个关键点,其实就很简单了。

让我们首先了解基础知识:您需要知道 .service 文件所在的位置。
我曾经在/var/run中搜索,但是系统死机了——这是错误的地方,兄弟!通常在这两个地方:/usr/lib/systemd/system/(系统默认)或/etc/systemd/system/(手动添加)。
例如,如果安装Docker,docker.service文件就会放在后者中。

检查服务是否存在。
我有一个有效的个人测试方法。
首先运行 systemctl list-unit-files | grep 服务名称。
例如,要检查 Nginx,请输入 grep nginx。
只需查看状态已启用即可。
如果已禁用,请使用 sudo systemctl Enable nginx 来启用它。
该命令实际上在 /etc/systemd/system/multi-user.target.wants/ 目录中创建到实际服务文件的软链接。
您可以使用 ls -l /etc/systemd/system/multi-user.target.wants/ 查看这些链接。

我遇到了一个陷阱:更改 .service 文件后,需要重新加载配置。
上次改了Apache配置,发现不重启就没用了。
赶紧使用 sudo systemctl daemon-reload 释放即可生效。
这个命令似乎是在告诉systemd,“兄弟,我改了配置,请再运行一下试试。

至于服务名称的区别,那就真的要看运气了。
我遇到了在 CentOS 上编写 httpd 和 apache2 的两种方法。
在 Ubuntu 中它们都是 apache2 我建议首先使用 list-unit-files 来查找最可能的服务名称。
如果这不起作用,请查看 /etc/init.d/ 或 /usr/lib/systemd/system/ 中的文件。

临时启动服务时,切勿使用enable命令。
例如, sudo systemctl start mysql 会立即启动,但重新启动服务器仍会停止它。
上次我忘记了。
结果MySQL生产环境突然消失了,老板差点解雇我。

最糟糕的是有些服务甚至无法开启需要。
例如,Docker 具有引导程序功能。
只需 sudo systemctl 启动 docker 即可。
因此,如果遇到问题,请先阅读官方文档,而不是自己解决。

我建议你记下这些命令:list-unit-files、Enable、daemon-reload、status。
一旦成功使用它们,您就可以开始管理 Linux 服务。
但说实话,systemd 比传统的 init 更复杂。
如果能理解这一点就好了。

如何管理Linux系统服务 systemctl启停服务教程

嘿,这就是Linux系统服务管理。
systemctl命令是主要操作。
当我第一次开始使用它时,我真的很困惑。
启动服务,sudosystemctlstartnginx。
一旦发出这个命令,Nginx就会启动。
那么如果你想停止服务,sudosystemctlstopsshd就会停止SSH服务。
重新启动服务,sudosystemctlrestartapache2 ,Apache服务就会重新启动。
这个操作简单吗?
再看一下重新加载配置,sudosystemctlreloadnginx,服务没有中断,重新加载了配置。
查看服务状态、systemctlstatusnginx、服务运行状态、PID、内存使用情况和最近日志一目了然。

说到启动时自动启动,设置启动时自动启动,sudosystemctlenablehttpd,禁用启动时自动启动,sudosystemctldisablehttpd,检查是否启用,systemctlis-enabledhttpd,检查是否正在运行,systemctlis-activehttpd,这些操作也很方便。

高级管理操作,例如systemd配置重新加载和sudosystemctldaemon-reload,必须在修改服务文件后执行。
要查找失败的服务,请使用 systemctl--failed。
这个功能非常有用。

服务诊断和日志分析,查看服务日志,使用journalctl工具,journalctl-uhttpd,查看所有日志,journalctl-uhttpd -f,实时跟踪日志,journalctl-uhttpd - 从“昨天”开始,查看指定时间的日志。
如果systemctlstatusnginx显示失败,通过日志定位错误的具体原因,如配置错误、端口繁忙等。

自定义服务管理,创建.service文件,路径为/etc/systemd/system/,如mywebapp.service,写入服务描述、启动命令、重启策略,设置启动自启动目标及相关启动目标。
创建文件后,重新加载配置,sudosystemctldaemon-reload,设置启动时自动启动,sudosystemctlenablemywebapp.service,立即启动服务,sudosystemctlstartmywebapp.service,检查状态,systemctlstatusmywebapp.service。

Systemd的优点是并行启动,缩短系统启动时间,统一管理,通过“单元”管理服务、设备、定时任务等,资源监控,内置cgroup管理进程资源,集中日志,使用journalctl统一日志查询。
掌握了systemctl命令和自定义服务管理后,Linux系统服务的效率和稳定性得到了很大的提高。