서비스 파일이 존재하지만 systemd에서 찾을 수 없습니다.

서비스 파일이 존재하지만 systemd에서 찾을 수 없습니다.

systemd 서비스 파일을 만들어서 넣었습니다 . 시스템을 /etc/systemd/system/anfragen-3dkonfig-mapper.service실행 systemctl daemon-reload하고 다시 시작했습니다.systemctl daemon-reexec

  • systemctl enable anfragen-3dkonfig-mapper밝혀지다

    Failed to enable unit: Unit file anfragen-3dkonfig-mapper.service does not exist.
    
  • systemctl start anfragen-3dkonfig-mapper밝혀지다

    Failed to start anfragen-3dkonfig-mapper.service: Unit anfragen-3dkonfig-mapper.service not found.
    
  • ls -lh /etc/systemd/system/anfragen-3dkonfig-mapper.service산출

    -rw-r--r--. 1 root root 440 Mar 19 12:08 /etc/systemd/system/anfragen-3dkonfig-mapper.service
    
  • cd /root && systemd-analyze verify anfragen-3dkonfig-mapper.service종료 코드는 0이고 출력이 인쇄되지 않습니다.

  • mount프로그램

    /dev/sda2 on / type xfs (rw,relatime,seclabel,attr2,inode64,noquota)
    
  • 다른 마운트가 접촉 /usr되거나 /etc.

  • 서비스 파일의 내용은 다음과 같습니다.

    [Unit]
    Description=Anfragen 3D Konfigurations Mapper Service
    After=network.target
    
    [Service]
    Restart=always
    ExecStartPre=-/usr/bin/podman stop anfragen-3dkonfig-mapper
    ExecStartPre=-/usr/bin/podman rm anfragen-3dkonfig-mapper
    ExecStart=/usr/bin/podman run --rm --name anfragen-3dkonfig-mapper-app -p 10010:10000 anfragen-3dkonfig-mapper-app:0.0.1
    ExecStop=/usr/bin/podman stop anfragen-3dkonfig-mapper
    
    [Install]
    WantedBy=multi-user.target
    
  • 위의 모든 명령은 user 로 실행됩니다 root.

  • 운영 체제: CentOS Linux 버전 8.0.1905(코어)
  • 시스템 버전: 239
  • 리눅스 커널:Linux version 4.18.0-80.11.2.el8_0.x86_64 ([email protected]) (gcc version 8.2.1 20180905 (Red Hat 8.2.1-3) (GCC))
  • 몇 달 전에 다른 서비스 파일에서 비슷한 문제가 있었던 것을 막연하게 기억합니다. 몇 시간 동안 서비스 파일을 뒤지고 이름을 바꾼 후에 마술처럼 작동하기 시작했습니다.

나는 두 가지에 관심이 있습니다:

  • 이와 같은 문제를 디버깅하는 방법은 무엇입니까?
  • 뭐가 문제 야?

답변1

@JdeBP가 제안한 것처럼 잘못된 SELinux 파일 태그가 이 동작의 원인입니다. .출력의 문자는 ls파일에 보안 컨텍스트가 설정되어 있음을 나타냅니다. 그러니 .출력에 주의하세요 ls!

cd /etc/systemd/system && ls -lhZ some-other-service.service anfragen-3dkonfig-mapper.service인쇄

-rw-r--r--. 1 root root unconfined_u:object_r:admin_home_t:s0        440 Mar 19 12:08 anfragen-3dkonfig-mapper.service
-rw-r--r--. 1 root root unconfined_u:object_r:systemd_unit_file_t:s0 457 Feb 24 11:42 some-other-service.service

보시다시피 다른 서비스 파일에는 이 systemd_unit_file_t태그가 있지만 손상된 서비스에는 없습니다. 이 문제는 해결될 수 있습니다 restorecon anfragen-3dkonfig-mapper.service. 그러면 레이블은 다음과 같이 표시됩니다.

-rw-r--r--. 1 root root unconfined_u:object_r:systemd_unit_file_t:s0 440 Mar 19 12:08 anfragen-3dkonfig-mapper.service
-rw-r--r--. 1 root root unconfined_u:object_r:systemd_unit_file_t:s0 457 Feb 24 11:42 some-other-service.service

systemd는 이제 예상대로 작동합니다.

답변2

-rw-r--r--. 

SELinux 제한으로 인해 생활이 복잡해집니다.

답변3

일부 서비스 파일을 이동한 후 이 문제를 해결하는 데 한 시간이 걸렸습니다. 의 심볼릭 링크는 /lib/systemd/system올바른 파일을 가리키지만 의 심볼릭 링크는 /etc/systemd/system그렇지 않습니다(해당 대상이 더 이상 존재하지 않음). 문제가 있는(깨진) 심볼릭 링크를 삭제하고 올바른 심볼릭 링크로 교체했더니 제대로 작동했습니다.

답변4

비슷한 문제가 있었는데, centos7에서 rootless podman을 사용하고 있었습니다.

다시 시작한 후 컨테이너가 시작되지 않고 서비스를 찾을 수 없습니다. 그러나 다시 시작하기 전에 서비스가 활성화되어 /etc/systemd/system에 존재합니다. 서비스는 /home/user에서 /etc/systemd로 syslink ln -s를 통해 생성됩니다.

재부팅 후 실행하면 Systemctl status nameOfService.service"단위 서비스 이름을 찾을 수 없습니다. 서비스"가 반환됩니다.

서비스 를 실행하면 systemctl daemon-reload해당 서비스가 다시 나타납니다 .

가능한 해결책 중 하나는 /root/에서 /etc/systemd/system으로 syslink ln -s를 생성하는 것입니다. 재부팅 후에도 서비스는 계속 존재합니다.

더 나은 솔루션

  • 데몬 다시 로드를 수행하고 서비스를 시작하기 위한 자체 서비스 만들기

daemon-reload를 사용하여 startServiceOnBoot.sh 스크립트를 생성하고 서비스를 시작합니다.

    #!/bin/bash 
    sudo systemctl daemon-reload    
    sudo systemctl start nameOfService.service

sh 스크립트를 실행 가능하게 만들기chmod +x startServiecOnBoot.sh

서비스 생성 /etc/systemd/system/serviceStarter.service

[Unit]
Description=Daemon Reloader
...

[Service]
ExecStart=/home/user/startServiecOnBoot.sh
...

[Install]
WantedBy=multi-user.target

시작 시 서비스 활성화 systemctl enable serviceStarter.service새로운 서비스를 시작하면 serviceStarter.service가 실제로 nameOfService.service도 시작되는지 확인할 수도 있습니다.

성공하지 못한 채 systemd에서 After= 및 .timer 서비스를 사용해 보았습니다. $systemd-analyze 디버깅을 위해 Blame

관련 정보