如何定期运行 systemd 服务?

如何定期运行 systemd 服务?
[Unit]
Description=captive portal automation

[Service]
Type=simple

ExecStart=/usr/bin/python /home/pi/do.py
Restart=on-failure
RestartSec=5

以上是caportal.service在 Ubuntu 14.04 机器上运行的 systemd 服务的内容。我需要每 30 分钟重复一次该服务。我该怎么做?

/home/pi/do.py

import requests,json
import netifaces as ni
import commands as cm


gateway=ni.gateways()['default'][ni.AF_INET][0]

IPaddr=ni.ifaddresses('wlan0')[ni.AF_INET][0]['addr']
mac=ni.ifaddresses('wlan0')[ni.AF_LINK][0]['addr'].upper().replace(':','-')
ssid=cm.getoutput('iwgetid -r')
Home="http://"+gateway+":8010/"

URL=Home+"login.html"
print URL
d={}
d['IdSession']=mac
d['Language']='English'
d['refrescar']='0'
d['ip']=IPaddr
d['mac']=mac
d['DSP']=Home
d['AC']='1'
d['userlog']='vishnu'
d['userpass']='12345'
d['read']='checkbox'
d['Login']='+++Go+++'

try:
    if ssid=='machCochin':
        r=requests.post(URL,data=d)
        print r.status_code
        #raise ValueError("ERROR simulated")
    else:
        print "network is not machCochin"
except Exception as e:
    pass

答案1

systemd提供了 cron 作业的模拟。它们被称为计时器

您需要创建一个.service文件来运行您的脚本和一个.timer具有匹配文件名的文件来安排它。

就像是:

[Unit]
Description=run my script

[Timer]
OnCalendar=*-*-* *:00/5:05
Persistent=true

[Install]
WantedBy=timers.target

例如每 5 分钟运行一次。我让你查阅手册页或搜索引擎来查找OnCalendar指令或其他指令。

您甚至可以将两个文件放在一起作为用户运行,~/.config/systemd/user/或者以 root 身份运行/etc/systemd/system

您需要在重启后激活定时器才能运行

sudo systemctl enable myservice.timer

如果你以用户身份运行,则添加--user上面的命令(无需 sudo)./config

然后运行

sudo systemctl start myservice.timer

或者

systemctl --user start myservice.timer

答案2

@martin-w 回答你的问题,你可以在 Timer 部分下添加 OnBoot 指令。例如

[Unit]
Description=run my script

[Timer]
OnCalendar=*-*-* *:00/5:05
OnBootSec=5
Persistent=true

[Install]
WantedBy=timers.target

您可以检查一下关联了解更多信息。

相关内容