问题描述
我在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一样(正常的日期格式,没有历元)。
任何建议我的命令有什么问题?谢谢!
解决方法
%
安全被systemd取代。来自systemd.unit manual:
说明符
“%s”用户外壳程序这是运行服务管理器实例的用户的外壳程序。如果是系统管理员,则解析为“ / bin / sh”。
%s
替换为/bin/sh
,而date +/bin/sh
返回/bin/sh
。
要做:
ExecStart=/bin/bash -c "echo $(date +%%s) random=$((RANDOM %% 10)) > /tmp/my.log"
不推荐使用反引号`。请改用$(...)
。 bash hackers wiki deprecated and obsolete syntax