从 systemd bash 内联脚本创建文件名_$(日期 %Y-%m-%d)
Creating filename_$(date %Y-%m-%d) from systemd bash inline script
我正在尝试执行一个 systemd
计时器,并希望将执行脚本的输出按日期保存在一个文件中。这是我在 .service
文件中的 ExecStart
脚本:
ExecStart=/bin/bash -c 'echo $(date +%Y-%m-%d) >> /home/username/test_output_$(date +%Y-%m-%d).log'
这会创建文件,但会添加 "hash" 而不是月份名称:
~/test_output_2017-ea3c0c2dd56c499a93412641e41008db-01.log
内容相同:
2017-ea3c0c2dd56c499a93412641e41008db-01
如果我 运行 /bin/bash -c 'echo $(date +%Y-%m-%d)'
在 shell 中而不通过 systemd 服务传递它,它会按预期工作。印刷:
2017-09-01
.
在 systemd
环境中,%m
是否代表月份?
知道如何设置 systemd 服务以将脚本的标准输出放入包含当前日期的文件中吗?
预期结果:
test_output_2017-09-01.log
谢谢。
您需要转义 $ 和 % 符号,将它们都加倍才能完成这项工作。
如此处所述:
- https://github.com/systemd/systemd/issues/2146
- https://www.freedesktop.org/software/systemd/man/systemd.service.html#Command%20lines
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'
我正在尝试执行一个 systemd
计时器,并希望将执行脚本的输出按日期保存在一个文件中。这是我在 .service
文件中的 ExecStart
脚本:
ExecStart=/bin/bash -c 'echo $(date +%Y-%m-%d) >> /home/username/test_output_$(date +%Y-%m-%d).log'
这会创建文件,但会添加 "hash" 而不是月份名称:
~/test_output_2017-ea3c0c2dd56c499a93412641e41008db-01.log
内容相同:
2017-ea3c0c2dd56c499a93412641e41008db-01
如果我 运行 /bin/bash -c 'echo $(date +%Y-%m-%d)'
在 shell 中而不通过 systemd 服务传递它,它会按预期工作。印刷:
2017-09-01
.
在 systemd
环境中,%m
是否代表月份?
知道如何设置 systemd 服务以将脚本的标准输出放入包含当前日期的文件中吗?
预期结果:
test_output_2017-09-01.log
谢谢。
您需要转义 $ 和 % 符号,将它们都加倍才能完成这项工作。
如此处所述:
- https://github.com/systemd/systemd/issues/2146
- https://www.freedesktop.org/software/systemd/man/systemd.service.html#Command%20lines
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'