시스템 단위 ExecStart를 디버깅하는 방법 된 ExecStart/ExecStop명령 줄을 인쇄 할 수

완전히 확장 된 ExecStart/ExecStop명령 줄을 인쇄 할 수 있는지 궁금합니다 . 다음 예제를 고려하십시오.

ExecStart=/usr/bin/java $OPTS_COMMON $OPTS $OPTS_LOG $OPTS_DEBUG some.class.Start --param1 ${PARAM1} --param2 ${PARAM2}

많은 환경 변수가 포함 된 꽤 긴 명령 줄이 있습니다. 변수 중 일부가 잘못되면 (예 : 드롭 인 구성) 서비스가 전혀 시작되지 않을 수 있습니다. 그러나 나는 어디서나 대체 된 envs로 완전히 확장 된 라인을 보지 못하고 무엇이 잘못되었는지 알아 내려고 노력합니다.

나는 이것을 인터넷 검색하지 않았고 지금까지 내가 찾은 유일한 가능성 /usr/bin/echo은 서비스 자체 대신 실행되도록 단위 파일을 수정하는 것입니다. 그러나 그것은 약간 성가시다. 또는 더 성가신 솔루션-모든 환경 변수를 하나씩 확인하십시오.

systemd가 실제로 실행하려고 시도한 것을 표시하도록 강제하는 방법이 있습니까?



답변

불행하게도 내장 된 방법은 없습니다. 최종 ExecStart를 보려면 디버깅을 켤 수 있습니다. 편집 파일 /etc/systemd/system.conf과 설정 LogLevel=debug. 그러면 다음과 같은 것이 보일 것입니다 :

java.service About to execute: /usr/bin/java $OPTS_COMMON...이렇게해도 문제가 해결되지는 않지만 systemd의 지정자 교체를 보는 것이 좋습니다. https://www.freedesktop.org/software/systemd/man/systemd.unit.html(specifiers)

그러나 실제로 인수 교체의 맨 아래에 도달하려면 여기를 참조 해야합니다.


답변

[서비스] 섹션의 * .service 파일에서

ExecStartPre=/bin/bash -l -c 'echo "$OPTS_COMMON">/tmp/options.debug'