서버가 (다시) 시작될 때 쉘 스크립트를 시작하기 위해 Linux 서비스를 만들었습니다. 내 서버를 테스트하는 동안 서비스를 수동으로 시작하면 시작할 수 있지만 "systemctl"을 사용하여 활성화하면 시작하지 못하는 것을 발견했습니다. 원인은 무엇입니까?
내 로그:
systemctl 상태 스크립트.서비스
script.service - name
Loaded: loaded (/etc/systemd/system/scriptname.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2024-03-04 15:39:34 CET; 3min 45s ago
Process: 1303 ExecStart=/usr/local/bin/scriptname.sh (code=exited, status=126)
Main PID: 1303 (code=exited, status=126)
Mar 04 15:39:34 sar systemd[1]: Started ######.
Mar 04 15:39:34 sar systemd[1]: scriptname.service: main process exited, code=exited, status=126/n/a
Mar 04 15:39:34 sar systemd[1]: Unit scriptname.service entered failed state.
Mar 04 15:39:34 sar systemd[1]: scriptname.service failed.
Journalctl -u 서비스 이름.service tail -n 50 |
-- Reboot --
Mar 04 15:39:34 sar systemd[1]: Started #####.
Mar 04 15:39:34 sar systemd[1]: scriptname.service: main process exited, code=exited, status=126/n/a
Mar 04 15:39:34 sar systemd[1]: Unit scriptname.service entered failed state.
Mar 04 15:39:34 sar systemd[1]: scriptname.service failed.
답변1
해결책은 다음과 같습니다.
서비스 파일을 다음과 같이 변경하면 문제가 해결되었습니다.
Group
,Restart
및 줄을 추가하면WantedBy
정상적으로 시작됩니다.- 그룹 ID를 자신의 사용자 ID로 변경하세요.
vi /etc/systemd/system/servicename.service
[Unit]
Description= app description
After=network.target
Wants=network-online.target #(optional)
[Service]
Type=simple
User=t9s1takuser
Group=208816585
ExecStart=/usr/local/bin/myscript.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target