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