설정
간단한 스크립트가 있습니다: script.sh
#!/bin/bash
while true;do
echo "$(date)"
sleep 3
done
systemd의 서비스 단위에 포함시켜 계속 실행하고 싶습니다. 그래서 저는 간단한 단위 파일을 만들었습니다.
[Unit]
Description=test
[Service]
ExecStart=/bin/bash /home/user/p/test/system/script.sh
[Install]
WantedBy=multi-user.target
그런 다음 /etc/systemd/system에 있는 유닛 파일에 대한 심볼릭 링크를 생성하고 고유한 이름을 지정합니다.
ln -s $(readlink -f ./unit) /etc/systemd/system/superspecial.service
이제 서비스를 시작할 수 있어요
systemctl start superspecial
효과가있다. 물론 메아리는 볼 수 없지만 볼 수는 있어요
systemctl status superspecial
질문
이제 내 문제는 서비스가 부팅 시 시작되도록 "활성화"하려고 할 때 알 수 없는 오류 메시지가 표시되고 검색에 실패한다는 것입니다.
€ systemctl enable superspecial.service
Failed to look up unit file state: Invalid argument
무슨 주장? 유닛 파일 상태는 어떤가요? 내 유닛 파일에 뭔가 빠졌나요? 내 시스템에 대한 일부 정보:
€ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal
€ systemctl --version
systemd 245 (245.4-4ubuntu3.16)
+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=hybrid
실행 중인 서비스에 대한 일부 정보:
€ systemctl status superspecial
● superspecial.service - test
Loaded: loaded (/etc/systemd/system/superspecial.service; bad; vendor preset: enabled)
Active: active (running) since Wed 2022-04-27 15:58:01 CEST; 14min ago
Main PID: 13111 (bash)
Tasks: 2 (limit: 9282)
Memory: 540.0K
CGroup: /system.slice/superspecial.service
├─13111 /bin/bash /home/user/p/test/system/script.sh
└─20421 sleep 3
Apr 27 16:11:45 hostname bash[13111]: Mi 27. Apr 16:11:45 CEST 2022
Apr 27 16:11:48 hostname bash[13111]: Mi 27. Apr 16:11:48 CEST 2022
Apr 27 16:11:51 hostname bash[13111]: Mi 27. Apr 16:11:51 CEST 2022
Apr 27 16:11:54 hostname bash[13111]: Mi 27. Apr 16:11:54 CEST 2022
Apr 27 16:11:57 hostname bash[13111]: Mi 27. Apr 16:11:57 CEST 2022
물론 루트 권한으로 실행하고 서비스를 재부팅하고 다시 시작하는 것을 반복해서 시도했습니다. 아마도 이것이 systemctl의 "나쁜" 상태와 관련이 있는 것일까요?
답변1
내 경우에는 명령을 시도했습니다.
sudo ln -s /home/username/myproject/config/systemd.conf /etc/systemd/system/myproject.service
같은 문제가 발생했습니다. 그런 다음 다음 명령을 시도했습니다.
sudo ln -f /home/username/myproject/config/systemd.conf /etc/systemd/system/myproject.service
-f
대신 을 사용합니다 -s
.
답변2
감사해요. 당신 말이 맞아요. 심볼릭 링크 대신 하드 링크를 사용하여 문제가 해결되었습니다.
readlink -f
파일 항목에 대한 절대 경로를 원할 경우 이것이 바로 제가 사용하는 경로입니다.