[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
您可以检查一下关联了解更多信息。