user3482407
user3482407

Reputation: 319

systemd service redirect stdout to custom filename

I am working with systemd services in order to start an application. Stdout should be redirected to a file containing the current date (when the service was started). Logging to a file works fine, however, I don't know how to provide the date for the filename within the service. Any ideas?

...
[Service]
ExecStart=/bin/mybin
StandardOutput=file:/my/path/<filename should contain date>.log
...

Upvotes: 1

Views: 5660

Answers (2)

Michael
Michael

Reputation: 189

I have the same needs and I have found a nice solution for me. It works well. Hope it can help you too.

1. Create an script.

You must put the script under /usr/bin. It's /usr/bin/ruoyi-gen.sh for me.

2. Add below contents.

#!/bin/bash
java -jar /root/xf-service/ruoyi-modules-gen-2.3.0.jar > /root/xf-service/ilogs/modules-gen-`date "+%Y-%m-%d"`.log 2>&1 &

Make the script executable -> chmod +x /usr/bin/ruoyi-gen.sh.

3. Add service description

Run vi /etc/systemd/system/ruoyi-gen.service, Add desciption like below:

[Unit]
Description=ruoyi-gen

[Service]
Type=forking
ExecStart=/usr/bin/ruoyi-gen.sh

[Install]
WantedBy=multi-user.target

4. Reload all systemd service files

systemctl daemon-reload

5.Start your service

systemctl start ruoyi-gen

It works on CentOS 7.

Upvotes: 1

J&#252;rgen H&#246;tzel
J&#252;rgen H&#246;tzel

Reputation: 19727

systemd cannot generate the file name dynamically. But you can use bash redirection and date to create such a logfile.

[Service]
ExecStart=/bin/bash -c "/bin/mybin >/my/path/filename-$(date %%y-%%d-%%m).log"

Upvotes: 3

Related Questions