首页 > 解决方案 > Bash:使用 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 的预期(正常日期格式和无纪元)。

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

标签: linuxbashsystemd

解决方案


-secuences%被 systemd 替换。来自systemd.unit 手册

说明符

"%s" 用户 shell 这是运行服务管理器实例的用户的 shell。在系统管理员的情况下,这将解析为“/bin/sh”。

%s代替/bin/sh, 并date +/bin/sh返回/bin/sh.

做:

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

不鼓励使用反引号 `。改为使用$(...)bash 黑客 wiki 已弃用和过时的语法


推荐阅读