Reputation: 323
I am trying to execute a systemd
timer and would like to keep the output from the executed script in a file per date. Here is my ExecStart
script in the .service
file:
ExecStart=/bin/bash -c 'echo $(date +%Y-%m-%d) >> /home/username/test_output_$(date +%Y-%m-%d).log'
This creates the file but adds a "hash" instead of the month name:
~/test_output_2017-ea3c0c2dd56c499a93412641e41008db-01.log
The content is the same:
2017-ea3c0c2dd56c499a93412641e41008db-01
If I run /bin/bash -c 'echo $(date +%Y-%m-%d)'
in the shell without passing it through systemd service, it works as expected. Prints:
2017-09-01
.
Does %m
stand for something else than a month number in the systemd
environment?
Any idea how to set the systemd service to put the standard output from the script into a file with the current date?
Expected result:
test_output_2017-09-01.log
Thank you.
Upvotes: 14
Views: 13547
Reputation: 2401
You'll need to escape the $ and % signs, by doubling them both in order to make this work.
As described here:
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'
Upvotes: 15