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一样(正常的日期格式,没有历元)。

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

解决方法

%安全被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