温馨提示×

怎样启动linux守护进程

小樊
36
2026-10-21 01:58:02
栏目: 智能运维

在 Linux 中,“启动守护进程(daemon)”通常有几种常见方式,取决于你是自己写一个守护进程、还是启动系统已有的服务。下面分场景说明。


一、启动系统已有的守护进程(最常见)

1. 使用 systemd(现代 Linux 发行版,推荐)

大多数发行版(Ubuntu 16.04+、CentOS 7+)都使用 systemd。

# 启动服务
sudo systemctl start nginx

# 设置开机自启
sudo systemctl enable nginx

# 查看状态
sudo systemctl status nginx

服务配置文件一般在:

/etc/systemd/system/
/usr/lib/systemd/system/

2. 使用 SysVinit(老系统)

sudo service nginx start
# 或
sudo /etc/init.d/nginx start

二、手动启动一个程序作为守护进程

1. 使用 & 后台运行(简单但不规范)

./my_program &

缺点:

  • 终端关闭可能终止进程
  • 不被系统管理

2. 使用 nohup

nohup ./my_program > output.log 2>&1 &

适合临时运行。


3. 使用 setsid(真正脱离终端)

setsid ./my_program > output.log 2>&1 < /dev/null &

三、自己编写一个守护进程(C / Python 示例)

C 语言方式(经典 daemon)

关键步骤:

  1. fork()
  2. setsid()
  3. 重定向标准输入输出
  4. 改变工作目录

简化示例:

#include <unistd.h>
#include <stdlib.h>

int main() {
    if (fork() > 0) exit(0);
    setsid();
    chdir("/");
    freopen("/dev/null", "r", stdin);
    freopen("/dev/null", "w", stdout);
    freopen("/dev/null", "w", stderr);

    while (1) {
        sleep(10);
    }
}

Python 示例

import daemon
import time

with daemon.DaemonContext():
    while True:
        time.sleep(10)

四、推荐做法(总结)

场景 推荐方式
系统服务 systemd
临时后台任务 nohup / setsid
自写守护进程 systemd 或 daemon 库
老系统 init.d

如果你能告诉我:

  • 用的是哪种 Linux(Ubuntu / CentOS / Alpine)
  • 是启动已有服务,还是自己写程序

我可以给你更具体、可直接复制的命令。

0 踩