我有这个可以工作的脚本:
#! /usr/bin/bash
export SEQVAL=$(date +%s) && sed -i "s/^SEQ1=.*$/SEQ1=${SEQVAL}/" /etc/environment
systemctl restart ccs-srvapp-telemetry.service
就我而言,我无法使上述内容在单元文件中正常工作。
我拥有的最新版本如下,但曾尝试过几次,各种设置都因变量未设置或 sed 命令中某些内容未正确转义而失败。
[Unit]
Description=restarts fluent bit with a new SEQ1 to force a logrotate
After=network.target
[Service]
Type=oneshot
EnvironmentFile=/etc/environment
ExecStart=/usr/bin/sh -c 'export SEQVAL=$(date +%s) && sed -i "s/^SEQ1=.*$/SEQ1=${SEQVAL}/" /etc/environment'
ExecStartPost=/bin/systemctl restart ccs-srvapp-telemety.service
[Install]
WantedBy=multi-user.target
$
在行中使用时需要小心Exec
,因为 systemd 会在它出现的任何位置扩展格式${variable}
,即使在单引号字符串内也是如此。为了避免这种情况,请使用 进行转义$
。$$
此外,%
用作说明符,因此%s
用 shell 的名称替换。请使用 进行%
转义%%
。但这也应该有效:
另外,请注意命令可能在命令完成之前启动
ExecStartPost
。它在命令启动时启动。如果您想确定环境文件已更新,由于您正在使用,因此您只需几行,它们将按顺序运行。ExecStart
Type=oneshot
ExecStart