c - 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,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 exercise.service”->“sudo systemctl start exercise.服务”。
我的 Systemd 配置中有什么遗漏吗?
解决方案
推荐阅读
- python - 我是否必须再次预处理新数据才能预测模型?
- javascript - Javascript:encodeURIComponent 返回在键盘中键入的值和从剪贴板粘贴的值之间的不同值
- android - 禁用 Android TV 上的默认焦点行为
- azure - 逻辑应用:使用另一个帐户发送邮件
- javascript - 将 knex 与 es6 模块一起使用
- git - Git 存储库:文件未反映最新提交
- javascript - 如何在 vue/nuxt 中导入几十个 svg 文件
- java - 为什么我的代码中不断出现 arrayIndexOutOfBound 异常错误
- nginx - Nginx、nuxt.js 静态生成模式和尾部斜杠重定向
- python - 使用 Python/boto3 更新 S3 存储桶中的静态网页