Как запустить службу systemctl в Ubuntu 16.10 с помощью простого кода Daemon C

Я пишу простой код на 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.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

и хранится по адресу

/ и т. д. / systemd / система

после этого я запускаю команду

systemctl демон-перезагрузка

systemctl включить Daemon1.service

systemctl start Daemon1.service

Тогда я получил ошибку

Задание для Daemon1.service завершилось неудачно, поскольку процесс управления завершился с кодом ошибки.

См. Подробности в systemctl status Daemon1.service и journalctl-xe.

Затем я проверяю статус службы с помощью этой команды

systemctl status Daemon1.service

тогда я получил это

● 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 в ExecStart = в Daemon1.service


person Omkar    schedule 19.11.2019    source источник


Ответы (1)


В вашем выводе есть строка, которая дает вам не такой тонкий намек: (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.
person vhoang    schedule 19.11.2019
comment
Большое спасибо @Viet Hoang. Я застрял на 4 часа и тестировал разные исполняемые файлы. Большое тебе спасибо. Получил ответ. - person Omkar; 19.11.2019