Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用简单的守护程序C代码在Ubuntu 16.10中启动systemctl服务_C_Linux_Service_Daemon_Systemctl - Fatal编程技术网

如何使用简单的守护程序C代码在Ubuntu 16.10中启动systemctl服务

如何使用简单的守护程序C代码在Ubuntu 16.10中启动systemctl服务,c,linux,service,daemon,systemctl,C,Linux,Service,Daemon,Systemctl,我写简单的C代码 #include<stdio.h> #include<sys/types.h> #include<stdlib.h> #include<unistd.h> #include <sys/stat.h> int main(){ pid_t pid; pid=fork(); if(pid>0){ exit(1); }

我写简单的C代码

#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
#include<unistd.h>
#include <sys/stat.h>
int main(){

        pid_t pid;
        pid=fork();

        if(pid>0){

                exit(1);
        }



        FILE *fp;
        fp=fopen("pid.pid","a");
        fprintf(fp,"%d",getpid());
        fclose(fp);
        printf("\npid = %d\n",pid);
        printf("\ngetpid = %d\n",getpid());
        puts("\nAfter fclose() \n");
        umask(0);

        while(1){}

return 0;
}
并存放在指定地点

/etc/systemd/system

在此之后,我运行命令

systemctl后台程序重新加载

systemctl启用Daemon1.service

[Units]
Description=Socket programming with Daemon

[Service]
User=root
Type=forking
WorkingDirectory=/Omkar/Doc/systemctl/
ExecStart=/Omkar/Doc/systemctl/main
Restart=always
PIDFile=/Omkar/Doc/systemctl/pid.pid

[Install]
WantedBy=multi-user.target
systemctl启动Daemon1.service

[Units]
Description=Socket programming with Daemon

[Service]
User=root
Type=forking
WorkingDirectory=/Omkar/Doc/systemctl/
ExecStart=/Omkar/Doc/systemctl/main
Restart=always
PIDFile=/Omkar/Doc/systemctl/pid.pid

[Install]
WantedBy=multi-user.target
然后我犯了个错误

Daemon1.service的作业失败,因为控制进程已退出,错误代码为

有关详细信息,请参阅“systemctl status Daemon1.service”和“journalctl xe”

然后我用这个命令检查服务状态

systemctl状态Daemon1.service

[Units]
Description=Socket programming with Daemon

[Service]
User=root
Type=forking
WorkingDirectory=/Omkar/Doc/systemctl/
ExecStart=/Omkar/Doc/systemctl/main
Restart=always
PIDFile=/Omkar/Doc/systemctl/pid.pid

[Install]
WantedBy=multi-user.target
然后我得到了这个

● Daemon1.service
   Loaded: loaded (/etc/systemd/system/Daemon1.service; enabled; vendor preset: enabled)
   Active: failed (Result: start-limit-hit) since Tue 2019-11-19 18:21:26 IST; 3min 26s ago
  Process: 5868 ExecStart=/Omkar/Doc/systemctl/main (code=exited, status=1/FAILURE)

Nov 19 18:21:26 pt32-H81M-S systemd[1]: Failed to start Daemon1.service.
Nov 19 18:21:26 pt32-H81M-S systemd[1]: Daemon1.service: Unit entered failed state.
Nov 19 18:21:26 pt32-H81M-S systemd[1]: Daemon1.service: Failed with result 'exit-code'.
Nov 19 18:21:26 pt32-H81M-S systemd[1]: Daemon1.service: Service hold-off time over, scheduling restart.
Nov 19 18:21:26 pt32-H81M-S systemd[1]: Stopped Daemon1.service.
Nov 19 18:21:26 pt32-H81M-S systemd[1]: Daemon1.service: Start request repeated too quickly.
Nov 19 18:21:26 pt32-H81M-S systemd[1]: Failed to start Daemon1.service.
Nov 19 18:21:26 pt32-H81M-S systemd[1]: Daemon1.service: Unit entered failed state.
Nov 19 18:21:26 pt32-H81M-S systemd[1]: Daemon1.service: Failed with result 'start-limit-hit'.
我的服务没有运行。我需要更改什么才能使代码正常工作。
我将C代码的可执行文件提供给Daemon1中的ExecStart=。服务

在您的输出中有一行给出了一个不太微妙的提示:(code=exited,status=1/FAILURE)

[Units]
Description=Socket programming with Daemon

[Service]
User=root
Type=forking
WorkingDirectory=/Omkar/Doc/systemctl/
ExecStart=/Omkar/Doc/systemctl/main
Restart=always
PIDFile=/Omkar/Doc/systemctl/pid.pid

[Install]
WantedBy=multi-user.target
修改代码在分叉后将0而不是1返回操作系统

        if(pid>0){

                exit(0);
        }
在这一小小的调整之后,你应该重新开始工作,继续前进:

# systemctl status Daemon1.service
● Daemon1.service
   Loaded: loaded (/etc/systemd/system/Daemon1.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-11-19 08:49:33 CST; 5s ago
  Process: 20484 ExecStart=/root/stackoverflow/Daemon1 (code=exited, status=0/SUCCESS)
 Main PID: 20486 (Daemon1)
   CGroup: /system.slice/Daemon1.service
           └─20486 /root/stackoverflow/Daemon1

Nov 19 08:49:33 lm systemd[1]: Starting Daemon1.service...
Nov 19 08:49:33 lm systemd[1]: Started Daemon1.service.

非常感谢你,越南黄。我被困了4个小时,用不同的可执行文件进行测试。非常感谢你。我得到了答案。