서비스 파일에 한 줄 추가

서비스 파일에 한 줄 추가

Docker 컨테이너를 구축했으며 service.nginx파일을 변경해야 합니다.

다음 변수를 정의했습니다.

LINE=$(cat /usr/lib/systemd/system/nginx.service | grep -n "ExecStart=" | cut -d: -f1)
APPEND=$(cat /usr/lib/systemd/system/nginx.service | grep "ExecStart=")
CONFIG=" -e\ /nginx/nginx.conf"
FILE="/usr/lib/systemd/system/nginx.service"

이들의 출력은 다음과 같습니다:

13
ExecStart=/usr/sbin/nginx
-e\ /nginx/nginx.conf
/usr/lib/systemd/system/nginx.service

서비스 파일의 13번째 줄을 다음으로 변경하고 싶습니다.

ExecStart=/usr/sbin/nginx

도착하다

ExecStart=/usr/sbin/nginx -e\ /nginx/nginx.conf

여러 명령을 사용하고 시도했지만 awk평생 동안 파일을 생성할 수 없습니다.NRgsub

나는 다음 사항에 대해 생각하고 있습니다 :

awk 'NR==$LINE{gsub("$APPEND", "$APPEND$CONFIG)};1' $FILE > tmp && mv tmp $FILE

아무런 변경 없이 새 파일을 생성하기만 하면 됩니다.

답변1

/usr/lib/systemd사용자는 찾은 시스템 파일을 수정해서는 안 됩니다. /etc/systemd/system운영 체제에서 제공하는 단위 파일의 구성을 재정의하기 위해 단위 파일을 배치할 수 있습니다 . 귀하의 경우에는 /etc/systemd/system/nginx.service다음 내용만 포함된 파일이 필요합니다 .

[Service]
ExecStart=/usr/sbin/nginx -e /nginx/nginx.conf

awk귀하의 예가 작동하지 않는 이유는 작은 따옴표 안에 쉘 변수를 사용하려고 시도하고 있기 때문에 확장되지 않고 리터럴로 유지되기 때문입니다. -vfor 옵션을 사용하여 awk쉘 변수를 전달할 수 있습니다 :

awk -v "LINE=$LINE" -v "APPEND=$APPEND" -v "CONFIG=$CONFIG" 'NR==LINE{gsub(APPEND, APPEND""CONFIG)};1' $FILE > tmp && mv tmp $FILE

관련 정보