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/sh
,date +/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
我在 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/sh
,date +/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