systemd에서 프로세스를 서비스로 만드는 방법은 무엇입니까?

systemd에서 프로세스를 서비스로 만드는 방법은 무엇입니까?

Linux에서 프로세스를 서비스로 전환하는 명령 또는 방법은 무엇입니까? 서비스는 본질적으로 데몬 프로세스가 아닌가?

답변1

사용자 서비스 예제는 이를 수행하는 방법을 설명하는 가장 간단한 방법입니다.

mytask서비스로 실행하려는 바이너리 또는 스크립트가 있고 /usr/local/bin/.

다음 내용으로 홈 디렉터리에 systemd이름이 지정된 유닛 파일을 만듭니다.my_example.service~/.config/systemd/user/

[Unit]
Description=[My example task]

[Service]
Type=simple
StandardOutput=journal
ExecStart=/usr/local/bin/mytask

[Install]
WantedBy=default.target

이 줄은 ExecStart실행하려는 바이너리 또는 스크립트의 경로를 지정하는 곳이므로 가장 관련성이 높습니다.

부팅 시 서비스가 자동으로 시작되게 하려면 다음을 실행하세요.

systemctl --user enable my_example.service

다시 시작하지 않고 즉시 서비스를 시작하려면 다음을 실행하십시오.

systemctl --user start my_example.service

서비스를 중지하려면 다음을 실행하십시오.

systemctl --user stop my_example.service

서비스 상태를 확인하려면 다음을 실행하세요.

systemctl --user status my_example.service

답변2

용어 로는 systemd,제공하다일종의단위파일은 물론 서비스, 소켓, 장치, 마운트, 자동 마운트, 교환, 대상, 경로, 타이머, 슬라이스 및 범위도 포함됩니다. 예, 기본적으로 시스템이나 사용자 데몬을 실행하는 방법입니다. 직접 작성하셔도 됩니다. 위 링크에서 공식 문서를 읽어보세요. 인터넷에는 많은 튜토리얼이 있습니다.

답변3

Linux에서는 프로세스를 서비스로 만드는 여러 가지 방법이 있습니다. 다른 사람들이 언급했듯이 를 사용하여 systemd프로세스를 실행하고 그 출력을 볼 수 있지만 언어 능력에 따라 C의 'double'을 사용하는 구식 방식을 사용할 수 있습니다 fork()(Python 및 일부 다른 언어에도 이 방법이 있습니다). ).

fork()C 언어를 사용 하면 하위 프로세스가 생성됩니다. 상위 프로세스는 실제로 하위 프로세스에 대한 핸들을 유지하지만 완료될 때까지 기다리지 않을 수 있습니다. 상위 프로세스가 완료되면 하위 프로세스는 사실상 고아 프로세스가 됩니다. fork()다시 ing은 init(과정 1)을 의미합니다.사용새로운 프로세스.

fork()어쨌든, 이 모든 것이 데몬을 생성하는 데 어떻게 작동하나요 ? 글쎄요, 상위 프로세스가 종료되더라도 하위 프로세스는 계속 실행됩니다. 즉, 하위 프로세스는 이를 실행한 셸에 제어권을 반환한다는 의미입니다. 다음은 기본적인 예입니다 fork().

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

void forkexample()
{
  int ret = fork();
  if (ret == 0) {
    fork();
    /*
     * zomg i could run in here forever
     * as a daemon.
     * listen for input, monitor logfiles, whatever.
    */
    printf("I'm the child!\n");
    int x = 0;
    while (x < 10) {
      printf("Still running...\n");
      sleep(1);
      x++;
    }
  }
  else {
    printf("Child process spawned; pid %i\n", ret);
    printf("I'm a parent...\n");
  }
}
int main()
{
  forkexample();
  printf(" and I'm exiting.\n");
  return 0;
}

실행 결과는 다음과 같습니다. 짜다

어쨌든 계속 진행하십시오. 하위 프로세스는 프로그램처럼 영원히 계속 실행될 수 있습니다. 이것은 실제로 랩톱의 팬 속도를 제어하는 ​​첫 번째 실제 프로그램을 작성한 방법입니다.

관련 정보