systemd 서비스를 중지하거나 다시 시작하기 전에 로드된 Apache 모듈을 디스크에 쓰기

systemd 서비스를 중지하거나 다시 시작하기 전에 로드된 Apache 모듈을 디스크에 쓰기

systemd 서비스를 중지하거나 다시 시작하기 전에 로드된 아파치 모듈 목록을 파일로 디스크에 쓰고 싶습니다.

그래서 apache2.service에 추가했습니다.

ExecStop=/usr/sbin/apachectl -M > /home/ciasto/services/logs/apache2/loaded_mods

하지만 중지하면 오류가 발생합니다.

$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
   Active: failed (Result: exit-code) since Tue 2020-08-25 16:20:37 United; 3min 8s ago
  Process: 7269 ExecStop=/usr/sbin/apachectl -M >  /home/ciasto/services/logs/apache2/loaded_mods (code=exited, status=1/FAILURE)
 Main PID: 6245 (code=exited, status=0/SUCCESS)

Aug 25 16:20:36 rockpi apachectl[7269]:   -M                 : a synonym for -t -D DUMP_MODULES
Aug 25 16:20:36 rockpi apachectl[7269]:   -t -D DUMP_INCLUDES: show all included configuration files
Aug 25 16:20:36 rockpi apachectl[7269]:   -t                 : run syntax check for config files
Aug 25 16:20:36 rockpi apachectl[7269]:   -T                 : start without DocumentRoot(s) check
Aug 25 16:20:36 rockpi apachectl[7269]:   -X                 : debug mode (only one worker, do not detach)
Aug 25 16:20:36 rockpi apachectl[7269]: Action '-M >  /home/ciasto/services/logs/apache2/loaded_mods' failed.
Aug 25 16:20:36 rockpi apachectl[7269]: The Apache error log may have more information.
Aug 25 16:20:36 rockpi systemd[1]: apache2.service: Control process exited, code=exited status=1
Aug 25 16:20:37 rockpi systemd[1]: apache2.service: Failed with result 'exit-code'.
Aug 25 16:20:37 rockpi systemd[1]: Stopped The Apache HTTP Server.

답변1

사용 오류가 발생한 것 같습니다. apachectl당신이 그것을 호출한 것처럼 응답합니다:

/usr/sbin/apachectl '-M > /home/ciasto/services/logs/apache2/loaded_mods'

매개변수는 다음 과 같습니다 -M.>/home/...

이 줄은 , 또는 같은 특정 연산자를 ExecStop=지원하거나 지원하지 않습니다 . 이러한 연산자를 사용하여 쉘을 직접 호출하고 명령을 인수로 전달하려면 다음을 수행하십시오.shsh&>|

ExecStop=+/bin/sh -c '/usr/sbin/apachectl -M > /home/ciasto/services/logs/apache2/loaded_mods'

귀하의 의견에서 알 수 있듯이 귀하의 서비스는 훌륭했습니다 User=www-data. www-data트랜잭션에 실행 권한이 없거나 sbin트랜잭션에 쓰기 권한이 없을 수 있습니다 /home/ciasto/*. 따라서 다른 줄에서는 계속 www-data.ExecStop=+/bin/shExecStop=/bin/sh

작은 데모:

User=www-data
ExecStop=/usr/bin/whoami
ExecStop=+/usr/bin/whoami

일지에 다음과 같은 내용이 기록됩니다.

www-data
root

관련 정보