在Linux系统中,尤其是Ubuntu这样的主流发行版里,守护进程(Daemon)是运行在后台、不依赖用户交互的长期运行程序。它们负责处理网络请求、日志记录、定时任务等关键系统功能。随着Ubuntu从早期的SysV init过渡到现代的systemd,守护进程的管理方式也发生了显著变化。本教程将带你从零开始,理解并掌握Ubuntu守护进程的创建、启动、监控和管理方法,即使是Linux小白也能轻松上手。

什么是守护进程?
守护进程是一种在后台运行的特殊进程,通常以“d”结尾(如sshd、httpd、crond)。它们在系统启动时自动运行,并持续监听或执行特定任务,直到系统关闭。在Ubuntu中,这些进程由初始化系统(init system)管理。
早期Ubuntu使用SysV init脚本(位于
/etc/init.d/),但自Ubuntu 15.04起,默认采用更强大的systemd作为初始化系统。因此,现代Ubuntu的systemd服务管理已成为守护进程控制的核心方式。
使用systemd管理守护进程
systemd通过“单元文件”(Unit Files)来定义服务。每个守护进程对应一个
.service文件。下面我们将创建一个简单的自定义守护进程并用systemd管理它。
步骤1:编写一个简单的Python脚本作为守护进程
假设我们要运行一个每5秒记录一次时间的日志服务:
将上述代码保存为 #!/usr/bin/env python3import timeimport logging# 配置日志logging.basicConfig( filename='/var/log/mydaemon.log', level=logging.INFO, format='%(asctime)s - %(message)s')if __name__ == "__main__": while True: logging.info("守护进程正在运行...") time.sleep(5)/opt/mydaemon.py
,并赋予执行权限:
在sudo mkdir -p /optsudo cp mydaemon.py /opt/sudo chmod +x /opt/mydaemon.py步骤2:创建systemd服务单元文件
/etc/systemd/system/
目录下创建服务文件:
填入以下内容: 说明: 重新加载systemd配置,然后启用并启动服务: 使用以下命令检查服务是否正常运行: 你也可以查看日志: 通过本教程,你已经掌握了如何在Ubuntu系统中使用systemd创建和管理自定义守护进程。无论是开发自己的后台服务,还是维护系统级的Linux后台服务,这些技能都至关重要。记住,良好的守护进程应具备自动重启、日志记录和安全运行(如非root用户)等特性。 现在,你可以自信地管理任何Ubuntu系统服务了!如果你遇到问题,可以随时使用 注意:操作前请确保理解每条命令的作用,避免误操作影响系统稳定性。sudo nano /etc/systemd/system/mydaemon.service[Unit]Description=我的自定义守护进程After=network.target[Service]Type=simpleUser=nobodyExecStart=/usr/bin/python3 /opt/mydaemon.pyRestart=alwaysRestartSec=10StandardOutput=journalStandardError=journal[Install]WantedBy=multi-user.targetDescription
:服务描述 After
:在网络服务启动后再启动本服务 User
:以nobody用户运行(提高安全性) Restart=always
:崩溃后自动重启步骤3:启用并启动服务
sudo systemctl daemon-reloadsudo systemctl enable mydaemon.servicesudo systemctl start mydaemon.service步骤4:查看服务状态
sudo systemctl status mydaemon.servicesudo journalctl -u mydaemon.service -f常用systemd命令汇总
命令 作用 systemctl start <服务名>
启动服务 systemctl stop <服务名>
停止服务 systemctl restart <服务名>
重启服务 systemctl enable <服务名>
设置开机自启 systemctl disable <服务名>
取消开机自启 systemctl status <服务名>
查看服务状态 总结
journalctl
查看详细日志进行排查。
