Ubuntu 16.04에서 유닛 파일 생성

Ubuntu 16.04에서 유닛 파일 생성

이 유닛 파일은 다음 위치에 생성되었습니다 /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를 참조하세요.시스템 스크립트에서 분기이에 대해 자세히 알아보세요.

관련 정보