linux - 从 systemd bash 内联脚本创建 filename_$(date %Y-%m-%d)

标签 linux bash date inline systemd

我正在尝试执行一个 systemd 计时器,并希望将执行脚本的输出按日期保存在一个文件中。这是我在 .service 文件中的 ExecStart 脚本:

ExecStart=/bin/bash -c 'echo $(date +%Y-%m-%d) >> /home/username/test_output_$(date +%Y-%m-%d).log'

这会创建文件,但会添加一个“哈希”而不是月份名称:

~/test_output_2017-ea3c0c2dd56c499a93412641e41008db-01.log

内容相同:

2017-ea3c0c2dd56c499a93412641e41008db-01

如果我在 shell 中运行 /bin/bash -c 'echo $(date +%Y-%m-%d)' 而没有通过 systemd 服务传递它,它会按预期工作。打印: 2017-09-01

systemd 环境中,%m 是否代表月份数字?

知道如何设置 systemd 服务以将脚本的标准输出放入包含当前日期的文件中吗? 预期结果: test_output_2017-09-01.log

谢谢。

最佳答案

您需要转义 $% 符号,将它们都加倍才能完成这项工作。

如这里所述:

To pass a literal dollar sign, use "$$"

ExecStart=/bin/bash -c 'echo $$(date +%%Y-%%m-%%d) >> /home/username/test_output_$$(date +%%Y-%%m-%%d).log'

关于linux - 从 systemd bash 内联脚本创建 filename_$(date %Y-%m-%d),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45999187/

相关文章:

linux - 从 Windows 或 Linux 编译的 Arduino sketch 表现不同

c - C 中的 IPPROTO_TCP IP_TOS 的 setsockopt 失败

python - Ubuntu 20.04 "Temporary failure in name resolution"- 最近重新安装

bash - 无法验证应用程序默认凭据

c# - 如何从C#中的日期计算一天的开始和结束

java - 在 Eclipse 中查看 Java 应用程序的日期

linux - Linux中什么不是文件

linux - 在 linux 上完成密码字段 scp 命令

linux - 为什么 rsync 无法复制所有文件?

r - 在 R 中对齐多个时间序列