linux - 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 的预期(正常日期格式和无纪元)。
有什么建议我的命令有什么问题吗?谢谢!
解决方案
-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 已弃用和过时的语法
推荐阅读
- python - 如何使用 Selenium 单击文本链接(外语)?(当anchorstyle中的类)
- java - 与远程 MS SQLServer 的 JDBC 连接失败
- javascript - 如何使用随机图像命令
- javafx - JAVAFX Stage:默认按钮选择和文本填充对齐
- c# - 集成测试:验证通过的任何内容
- kubernetes - 在 Istio 中配置 EnvoyFilter 以转发客户端证书
- python - 在烧瓶中传递列表类型的 URL 参数
- python - 如何在烧瓶应用程序中使用 MySQL 从用户输入将数据存储在我的数据库中。我收到一个错误
- python - 气流作业的 schedule_interval
- javascript - jQuery 中的 Accordion 让用户突然向上滚动页面