응용 프로그램 systemctl이 httpd.service 파일의 전체 ExecStart 줄을 실행하지 않았습니다.

응용 프로그램 systemctl이 httpd.service 파일의 전체 ExecStart 줄을 실행하지 않았습니다.

정확한 파일 위치는 다음과 같습니다.

/etc/systemd/system/multi-user.target.wants/httpd.service

다음 사항을 반영하도록 ExecStart 줄을 수정했습니다. ExecStart=echo START && echo test > /root/out.txt && echo $OPTIONS > /root/out.txt && echo END && /usr/sbin/httpd $OPTIONS -DFOREGROUND

보시다시피 &&를 사용하여 명령을 구분합니다. 서비스 출력을 디버깅하는 데 도움이 되는 방법을 찾으려고 합니다.

이렇게 변경한 후에도 " " 명령을 실행할 때 시스템은 여전히 ​​Apache를 시작합니다 systemctl start httpd.service. 그러나 시작 파일이 수정되었다는 오류가 발생하지만(괜찮습니다) /root/out.txt 파일이 생성되지 않았기 때문에 알 수 없는 다른 위치에서 실제 시작 줄을 가져오는 것처럼 보입니다. 누군가 이런 동작이 발생하는 이유에 대해 더 많은 정보를 제공할 수 있다면 매우 감사하겠습니다.

과거에는 새로운 systemd/systemctl이 출시되기 전에 비슷한 상황에서 시작 스크립트가 수행하는 작업을 관찰하기 위해 다음 명령을 사용했습니다.

bash -X /etc/init.d/httpd start

systemctl에서 볼 수 있듯이 이는 옵션이 아닙니다. 저는 아파치뿐만 아니라 다른 서비스에도 유사한 메커니즘을 구현하고 싶다는 점을 명심하세요. 이는 단지 예일 뿐입니다.

감사해요.

답변1

systemd 서비스 파일을 수정한 후 다음 명령을 실행하여 systemd 구성을 다시 로드해야 합니다.

systemctl daemon-reload

이렇게 하면 변경 사항이 실행되지 않는 문제가 해결될 수 있습니다. 그러나 이것이 서비스 시작 중에 더 많은 작업을 추가하는 주요 문제를 해결하지는 못합니다. 이제 다음을 &&사용하여 기존 명령을 확장하려고 합니다.시스템 문서:

여러 명령이 지정되면 유닛 파일에 나타나는 순서대로 호출됩니다. 명령 중 하나가 실패하면("-" 접두사가 붙지 않음) 다른 행은 실행되지 않고 장치는 실패한 것으로 간주됩니다.

ExecStartPre=및 선을 사용할 수도 있습니다 ExecStartPost=.

관련 정보