설치된 디스크의 시스템 링크 단위 파일을 로드할 수 없습니다.

설치된 디스크의 시스템 링크 단위 파일을 로드할 수 없습니다.

우리는 일반 systemd 디렉터리(/etc/systemd/system 및 /usr/lib/systemd/system) 외부에 배포하려는 systemd 서비스가 있는 내부 응용 프로그램을 가지고 있습니다. 위치는 다른 디스크에 있습니다(예제에서는 /mnt/data).

systemd 서비스는 다음을 통해 활성화됩니다.

systemctl enable /mnt/data/sprinterd.service

/etc/systemd/system에 심볼릭 링크를 생성합니다.

lrwxrwxrwx. 1 root root   27 Jun 20 22:47 sprinterd.service -> /mnt/data/sprinterd.service

재시작 후 유닛 파일을 찾을 수 없어 서비스가 로딩되지 않습니다. Journalctl에서 먼저 서비스를 로드하지 못했다는 오류가 발생한 다음 해당 장치가 있는 디스크를 마운트합니다.

Cannot add dependency job for unit sprinterd.service, ignoring: Unit sprinterd.service failed to load: No such file or directory.
systemd[1]: Mounted /mnt/data.

/etc/fstab에서:

/dev/disk/by-uuid/c55e944f-5c63-48ad-8cd2-bd32d7b35c82 /mnt/data auto nosuid,nodev,nofail,x-gvfs-show 0 0

완전성을 위해 서비스 단위 파일은 다음과 같습니다.

[Unit]
Description=sprinterd

[Service]
Type=simple
Environment=TERM=linux
ExecStart=/srv/s1.erp/bin/sprinterd
Restart=always
RestartSec=5
KillSignal=SIGKILL

[Install]
WantedBy=multi-user.target

저는 이것을 RHEL 7과 openSuSE 13.2에서 테스트했습니다.

/etc 또는 /usr 외부의 다른 디스크에 시스템 서비스 단위 파일을 배치하는 기능이 지원됩니까? 디스크 마운트와 시스템 단위 파일 로드 사이의 실행 순서를 변경하는 방법은 무엇입니까?

답변1

@StephenHarris가 설명했듯이 문제는 현재 systemd가 장치를 읽으려고 시도하고 있으며 심볼릭 링크된 파일을 아직 사용할 수 없다는 것입니다.


설치 후 장치를 다시 로드하도록 systemd에 지시합니다.

[Unit]
Description=reloads units stored in /mnt/data
DefaultDependencies=no
After=mnt-data.mount
Requires=mnt-data.mount

[Service]
Type=oneshot
ExecStart=/bin/systemctl daemon-reload

[Install]
WantedBy=local-fs.target

이번에는 장치를 사용할 수 있게 됩니다.이 시간심볼릭 링크의 대상이 이미 마운트되었습니다.

하지만 그때까지 실행해야 할 작업 목록은 다음과 같습니다.기본 대상이미 구축되어 서비스 중에 익숙해시작하자.


서비스도 다시 시작하려면 다음 안내를 따르세요.

[Unit]
Description=restart unit stored in /mnt/data
Requires=mnt-data.mount

[Service]
Type=oneshot
ExecStart=/bin/systemctl daemon-reload
ExecStartPost=/bin/systemctl start sprinterd.service

[Install]
WantedBy=multi-user.target

대안:

  • ExecStart=&로 테스트 했지만 ExecStartPost=분명히 ExecStartPre=&와 함께 사용해야 합니다.ExecStart=
  • 1개 단위에 관한 것이라면 다음과 같이 할 수도 있습니다 ExecStart=/bin/systemctl enable /mnt/data/sprinterd.service.데몬 다시 로드
  • 서비스가 여러 개 있는 경우 다음을 수행하세요.데몬 다시 로드ConsistsOf=를 클릭한 다음 PartOf=여러 서비스를 모두 사용하거나 로드하는 단위를 시작합니다.
  • NFS(또는 다른 네트워크 시스템)인 경우 이는 분명히 local-fs.target최선의 설치 옵션이 아닙니다.

더 오래된 학교를 위해시스템 초기화스타일 접근 방식에서는 systemctl 명령을 /etc/rc.local파일 에 넣습니다 chmod +x.

그런 다음 Devuan 메일링 리스트에 b0rked SystemD를 수정하기 위해 SysVInit이 필요한 방법을 게시하십시오 ;-)

답변2

이것은알려진 제한사항. 해결책을 제공해 드릴 수 있기를 바랍니다.

관련 정보