如何在systemd计时器单元中使用环境变量?

时间:2016-10-17 10:05:29

标签: timer environment-variables systemd

有一个systemd服务来执行一些shell。 我想用systemd计时器启动这个systemd服务。 我需要使forCalendar的值可以为devops配置。

我的第一次尝试是提供一个包含TIMER_ONCALENDAR键的配置文件, 在定时器单元中将其作为EnvironmentFile加载,并在配置文件不提供此密钥的情况下将默认值设置在定时器单元内。

[Timer]
Environment="TIMER_ONCALENDAR=*-*-* *:00,15,30,45:00"

EnvironmentFile=/etc/sysconfig/my-config-file

OnBootSec=2min
OnCalendar=${TIMER_ONCALENDAR}
Unit=myservice.service

[Install]
WantedBy=multi-user.target

我的问题是,该服务只运行一次,而不是每15分钟运行一次。 甚至可以在计时器单元中使用环境变量以及如何使用?

1 个答案:

答案 0 :(得分:2)

如果您不确定某个指令,例如Environment=,则可以使用man systemd.directives来查找指令所记录的手册页。

在这种情况下,它记录在man systemd.exec中,它解释了Environment=适用于4种类型的单位文件,但是"计时器"文件不是其中之一。

通过阅读“systemd.timer”,您可以发现系统定时器没有提及环境变量。

但是你提到你的最终目标是帮助DevOps自动化。这是可能的。

了解" drop-in" man systemd.unit. You can create a file which contains *only* the OnCalendar`指令中的文件,它将覆盖或添加到另一个基本配置文件。

DevOps人员可以轻松自动添加或替换包含OnSchedule=指令的文件。