在服务文件中追加一行

在服务文件中追加一行

我已经构建了一个 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

位于的 systemd 文件/usr/lib/systemd不应由用户修改。单元文件可以放置在 中,/etc/systemd/system以覆盖操作系统提供的单元文件中的配置。对于您的情况,您需要一个名为的文件,/etc/systemd/system/nginx.service仅包含以下内容:

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

awk您的示例不起作用的原因是您尝试在单引号内使用 shell 变量,它们不会扩展并保持字面量。您可以使用-v选项 forawk来传入 shell 变量:

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

相关内容