
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
위의 모든 명령은 사용자로 실행되었습니다
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
"Unit servicename.service를 찾을 수 없습니다."가 반환됩니다.
실행하면 systemctl daemon-reload
서비스가 다시 나타납니다.
가능한 해결책 중 하나는 /root/에서 /etc/systemd/system으로 syslink ln -s를 생성하는 것입니다. 재부팅 후에도 서비스는 계속 존재합니다.
더 나은 솔루션
- daemon-reload를 실행하고 서비스를 시작하는 자체 서비스 만들기
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 비난 디버깅용