Bash: systemd 的日期纪元

Bash: Date-epoch with systemd

我在 bash 控制台中执行以下行。

/bin/bash -c "echo `date` random=$((RANDOM % 10)) > /tmp/my.log"

my.log内容符合预期

Mo Aug 24 14:37:04 CEST 2020 random=6

现在我将时间戳更改为纪元(格式代码 +%s)。

/bin/bash -c "echo `date +%s` random=$((RANDOM % 10)) > /tmp/my.log"

文件是

1598272710 random=3

果然不出所料。

但是如果我将此命令行放入 systemd 中,它将失败。

[Service]                                                                                                             
ExecStart=/bin/bash -c "echo `date +%s` random=$((RANDOM % 10)) > /tmp/my.log"  

生产

/bin/sh random=7

一定是日期的格式代码有问题。如果我删除 +%s 那么它也符合预期(正常日期格式,没有纪元)与 systemd 一样。

有什么建议我的命令有什么问题吗?谢谢!

%-secuences 被 systemd 取代。来自 systemd.unit manual:

Specifiers

"%s" User shell This is the shell of the user running the service manager instance. In case of the system manager this resolves to "/bin/sh".

%s 代替 /bin/shdate +/bin/sh returns /bin/sh.

做:

ExecStart=/bin/bash -c "echo $(date +%%s) random=$((RANDOM %% 10)) > /tmp/my.log"

不鼓励使用反引号 `。请改用 $(...)bash hackers wiki deprecated and obsolete syntax