当前位置: 首页 > 知识库问答 >
问题:

如何使用简单的Daemon C代码在Ubuntu 16.10中启动systemctl服务

钱照
2023-03-14

我写简单的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;
}

还有Daemon1。服务

[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

并存放在

/etc/systemd/system

在此之后我运行命令

systemctl守护进程-重新加载

systemctl启用Daemon1。服务

System CTL start Daemon1.service

然后我得到了错误

Daemon1的工作。服务失败,因为控制进程已退出,错误代码为。

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

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

systemctl状态Daemon1。服务

然后我得到了这个

● 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=。服务

共有1个答案

乐正光誉
2023-03-14

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

● 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)

修改您的代码在分叉后返回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.
 类似资料:
  • 问题内容: 在我的Dockerfile中,我试图安装多个服务,并希望在启动容器时使它们全部自动启动。服务之一是mysql,当我启动容器时,我看不到mysql服务正在启动。当我尝试手动启动时,出现错误: Dockerfile: 我的start.sh文件: Docker构建: Docker运行: 我检查了图像,也无济于事。如何使用通过systemctl / service命令启动的服务启动容器。 问题

  • 在我的Dockerfile中,我试图安装多个服务,并希望在启动容器时使它们都自动启动。其中一个服务是mysql,当我启动容器时,我没有看到mysql服务启动。尝试手动启动时,出现错误: DockerFile: 我已经检查了映像,但这也没有帮助。如何用使用systemctl/service命令启动的服务启动容器。

  • 我想知道如何使用代码在android 4.0中启动截图服务。我知道我可以用电源按钮截图。但我想知道如何使用代码做到这一点。

  • 我试图在centos 7中启动Rabbitmq服务器。我安装了erlang,因为它依赖于Rabbitmq-server。包erlang。x86_640: R16B-03.7.el7。然后我使用包安装Rabbitmqrabbitmq-server-3.2.2-1.noarch.rpm.安装成功。我启用了管理控制台uisng Rabbitmq-plugins启用rabbitmq_management。

  • 我想使用Java代码启动weblogic服务器,并尝试了许多选项。在我的计算机中,startweBlogic.cmd文件位于 D:\Oracle\Middleware\user_projects\domains\ass1\startweBlogic.cmd

  • 问题内容: 我有以下angularjs服务: 如何从旧版js代码中调用函数? 问题答案: 使用angular.injector。使用您的代码,您可以执行以下操作: 这是jsfiddle:http : //jsfiddle.net/wGeNG/ 注意 -加载自定义模块之前,您需要添加“ ng”作为第一个模块,因为示例代码取决于ng模块中的$ http提供程序。 编辑 - 在OP的答案中使用, 但 请