在system d下写一个守护进程

以下是一个使用systemd创建守护进程的示例,假设我们要创建一个简单的守护进程,它每隔一定时间就将当前时间写入到一个日志文件中。

1. 编写守护进程代码

首先,创建一个名为 mydaemon.c 的C语言文件,内容如下:

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

#define LOG_FILE "/var/log/mydaemon.log"

void write_current_time_to_log() {
    FILE *fp;
    time_t now;
    struct tm *tm_info;

    // 打开日志文件,如果不存在则创建
    fp = fopen(LOG_FILE, "a");
    if (fp == NULL) {
        perror("fopen");
        exit(1);
    }

    // 获取当前时间
    now = time(NULL);
    tm_info = localtime(&now);

    // 将当前时间格式化为字符串并写入日志文件
    fprintf(fp, "Current time: %s", asctime(tm_info));

    // 关闭日志文件
    fclose(fp);
}

int main() {
    while (1) {
        write_current_time_to_log();
        sleep(60); // 每隔60秒写入一次时间
    }

    return 0;
}

这段代码实现了一个简单的循环,每隔60秒就获取当前时间并将其写入到指定的日志文件 /var/log/mydaemon.log 中。

2. 编译守护进程代码

使用以下命令编译 mydaemon.c 文件:

gcc mydaemon.c -o mydaemon

这将生成一个名为 mydaemon 的可执行文件。

3. 创建systemd单元文件

接下来,创建一个名为 mydaemon.service 的systemd单元文件,将其放置在 /etc/systemd/system/ 目录下。内容如下:

[Unit]
Description=My Daemon Service
After=network.target

[Service]
ExecStart=/usr/local/bin/mydaemon
WorkingDirectory=/usr/local/bin/
Restart=always
User=root
Group=root

[Install]
WantedBy=multi-user.target

在这个单元文件中:

  • [Unit] 部分:
    • Description 描述了这个服务的名称和用途。
    • After=network.target 表示这个服务应该在网络服务启动之后启动。
  • [Service] 部分:
    • ExecStart 定义了守护进程的启动命令,这里指向我们编译好的可执行文件 /usr/local/bin/mydaemon
    • WorkingDirectory 指定了守护进程的工作目录为 /usr/local/bin/
    • Restart=always 表示如果守护进程意外退出,systemd将总是重新启动它。
    • User=rootGroup=root 设定了运行这个守护进程的用户和组为 root
  • [Install] 部分:
    • WantedBy=multi-user.target 说明这个服务应该在多用户模式下启动。

4. 启用和启动服务

完成单元文件的创建后,使用以下systemd命令来启用并启动这个服务:

systemctl enable mydaemon.service
systemctl start mydaemon.service

systemctl enable 命令会在系统启动时自动启动这个服务,而 systemctl start 命令则立即启动这个服务。

5. 查看服务状态

可以使用以下命令查看服务的状态:

systemctl status mydaemon.service

这将显示服务的当前运行状态,包括是否正在运行、最近一次启动时间、是否有错误等信息。

通过以上步骤,我们就成功地使用systemd创建并启动了一个守护进程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最后一个bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值