
이 유닛 파일은 다음 위치에 생성되었습니다 /lib/systemd/system/menu-core-prices-update.service
.
[Unit]
Description = core-price-update daemon
After network.target = auditd.service
[Service]
Type = forking
ExecStart = /usr/local/bin/start-menu-core-prices-update.sh
ExecStop = /usr/local/bin/stop-menu-core-prices-update.sh
ExecReload = /usr/local/bin/reload-stop-menu-core-prices-update.sh
[Install]
WantedBy = multi-user.target
명령줄에서 다음을 실행할 수 있습니다.
$ /usr/local/bin/start-menu-core-prices-update.sh
그리고 프로그램이 정상적으로 시작됩니다. 하지만 데몬을 시작하면:
$ sudo systemctl start menu-core-prices-update.service
다음 오류가 발생합니다.
Jul 24 21:10:20 localhost systemd[13655]: menu-core-prices-update.service: Failed at step EXEC spawning /usr/local/bin/start-menu-core-prices-update.sh: Exec format error
-- Subject: Process /usr/local/bin/start-menu-core-prices-update.sh could not be executed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- The process /usr/local/bin/start-menu-core-prices-update.sh could not be executed and failed.
--
-- The error number returned by this process is 8.
Jul 24 21:10:20 localhost systemd[1]: menu-core-prices-update.service: Control process exited, code=exited status=203
Jul 24 21:10:20 localhost systemd[1]: Failed to start core-price-update daemon.
-- Subject: Unit menu-core-prices-update.service has failed
권한:
-rwxr-xr-x 1 root root 87 Jul 24 20:27 /usr/local/bin/start-menu-core-prices-update.sh
답변1
질문 1
다음과 같은 제목의 게시물을 찾았습니다.[해결됨] systemd에 사용자 정의 스크립트 추가위의 출력과 동일한 오류가 표시됩니다. 주로 다음과 같습니다.
EXEC 단계에서 /usr/local/bin/start-menu-core-prices-update.sh 생성에 실패했습니다. Exec 형식 오류
이 오류는 일반적으로 스크립트에 다음 문제 중 하나 이상이 있음을 의미합니다.
- 시행 불가능
- 셔뱅 누락(
#!/bin/bash
)
이러한 문제를 해결하려면 스크립트가 실행 가능한지 확인하세요.
$ chmod a+x /usr/local/bin/start-menu-core-prices-update.sh
#!/bin/bash
그리고 위에 shebang을 추가 하십시오 .
질문 #2
이 줄에 오타가 있는 것 같습니다.
After network.target = auditd.service
이는 아마도 다음과 같을 것입니다:
After=network.target auditd.service
질문 #3
을 사용하는 이유가 명확하지 않습니다 Type = forking
. 이 유형을 사용할 때는 ExecStart=
이라는 메서드를 사용해야 합니다 fork()
. 이 PIDFile=
옵션 도 사용해야 합니다 .
귀하의 Java 애플리케이션이 simple
또는 oneshot
. 다음 제목의 U&L Q&A를 참조하세요.시스템 스크립트에서 분기이에 대해 자세히 알아보세요.