我正在尝试将我的程序(应用程序)作为守护程序在systemd上启动。
应用程序为:
int main(int argc, char **argv)
{
unsigned long cnt=0;
puts("!!!Test DAEMON.");
// Daemonize
daemon(1, 0);
// Variables
struct timeval tv;
time_t nowtime;
struct tm *nowtm;
char tmbuf[64];
while(1){
gettimeofday(&tv, NULL);
nowtime = tv.tv_sec;
nowtm = localtime(&nowtime);
strftime(tmbuf, sizeof tmbuf, "%Y-%m-%d %H:%M:%S", nowtm);
printf("%ld : time %s\n", cnt, tmbuf);
FILE *fp=fopen("/tmp/spit.txt","a");
if(fp){
fprintf(fp, "%ld : time %s\n", cnt, tmbuf);
fclose(fp);
}
sleep(15);
cnt++;
}
return 0;
}
当我在控制台中运行时,此功能可以找到。它会创建一个文件,并每15秒增加一次计数器。
我通过以下方式通过该程序创建了服务:
在/lib/systemd/system
中创建了服务
[Unit]
Description=Simon demo service
After=crond.service
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=on-failure
RestartSec=5
User=root
ExecStart=/home/root/test_daemon
[Install]
WantedBy=multi-user.target
启用服务:
$ systemctl start my_service
$ systemctl enable my_service
重新启动后,在/tmp/spit.txt
中仅看到一个条目,就好像程序执行一次并退出一样。我在“ ps aux
”命令中看不到该守护程序。
谢谢