Systemd 状态表示守护进程处于活动状态正在运行,但守护进程未执行并创建重复进程

问题描述

以下是守护进程的代码(C 语言)。

    int main(void) {
    
    /* Our process ID and Session ID */
    pid_t pid2;
    
    /* The Big Loop */
    while (1) {
        time_t Now;
        time(&Now);
        struct tm *local = localtime(&Now);
        int hour = local->tm_hour;
        int min = local->tm_min;
        int earliest_time = 0; //8AM earliest a workout will be developed
        int latest_time = 24; //5PM latest a workout will be developed
        int min_interval = 20; //minimum interval of a workout
        int max_interval = 30; //maximum interval of a workout

        //If it's in between these hours of the day...
        if (hour >= earliest_time && hour < latest_time){

            int rand_interval = (rand() % (max_interval + 1 - min_interval)) + min_interval;

            pid2 = fork();
            if (pid2 == 0){
                execlp("./workout_SMS.py","./workout_SMS.py",NULL);
            }
            
            waitpid(pid2,0);
            //kill(pid2,SIGTERM);
            sleep(rand_interval);
        }

        else{
        sleep(60); /* wait 30 seconds */
        }
    }
exit(EXIT_SUCCESS);

}

我希望这个守护进程使用 Systemd 在启动时启动。根据 Systemd 手册和其他在线资源,我配置了一个 daemon.service 文件,如下所示。

[Unit]
Description=workout-daemon startup service
[Service]
User=pi
Type=simple
ExecStart=/home/pi/python/twilio/workout_SMS/workout-daemon
Restart=on-failure

[Install]
WantedBy=multi-user.target

以下是守护进程的 Systemd 状态。如图所示,状态表示它是“活动的(正在运行)”,并且随着时间的推移,继续创建新的重复进程。期望的行为是它只运行一个进程而不创建重复项。

● workout.service - workout-daemon startup service file for text message workouts
   Loaded: loaded (/etc/systemd/system/workout.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-12-29 03:15:35 PST; 1min 41s ago
 Main PID: 22363 (workout-daemon)
    Tasks: 5 (limit: 881)
   CGroup: /system.slice/workout.service
           ├─22363 /home/pi/python/twilio/workout_SMS/workout-daemon
           ├─22364 /home/pi/python/twilio/workout_SMS/workout-daemon
           ├─22409 /home/pi/python/twilio/workout_SMS/workout-daemon
           ├─22493 /home/pi/python/twilio/workout_SMS/workout-daemon
           └─22525 /home/pi/python/twilio/workout_SMS/workout-daemon

预期的操作是python脚本以特定的时间间隔向我的手机发送一条短信。当直接从工作目录运行时,守护进程将按预期运行,但是当我使用“sudo systemctl daemon-reload”->“sudo systemctl enable training.service”->“sudo systemctl start training.service”时它不会按预期运行。服务”。

我的 Systemd 配置有什么遗漏吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)