systemd timer替代crontab实现百度贴吧自动签到
crontab作为定时任务最常用的软件,已经被无数人在无数场景使用。但是有个涉及到环境变量和系统变量的问题,导致有时候程序可以手动执行,但是crontab就是跑不起来。虽然可以通过强制更改系统变量来解决,但是太折腾了。比如我想使用tieba-sign来实现贴吧自动签到,写了一个shell脚本,手动bash tieba.sh
就可以签到成功。但是放在crontab里面,不管是dash还是python3都无法成功执行。于是想到了systemd自带了timer功能,也可以定时执行,而且因为是系统服务,所以不需要考虑环境变量的问题。
以下为systemd timer替代crontab实现百度贴吧自动签到的全过程。
1 安装tieba-sign。使用python3的pip执行pip3 install tieba-sign
。
2 写一个包含tieba-sign和BDUSS的shell脚本tieba.sh
,如下:
#!/bin/bash
tieba-sign -v "4ekUxeVZjZvY2ktb09hRkhZNGRpbH5SZBHVYNgxaBJCQAAAAAAAAAAAEAAACl79rP7VhTFfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEbS1t1Gd;"
3 写一个tieba.service
和tieba.timer
,并将它们放到/etc/systemd/system/
中。
tieba.service如下,注意tieba.sh
的路径。
[Unit]
Description=Tieba Sign
[Service]
ExecStart=/home/tieba.sh
tieba.service如下,OnCalendar=*-*-* 12:00:00
表示为每天中午12点执行一次。
[Unit]
Description=Tieba Sign Timer
[Timer]
OnCalendar=*-*-* 12:00:00
[Install]
WantedBy=timers.target
4 执行systemctl enable tieba.timer
和systemctl start tieba.timer
,即可开机自启动和立刻拉起服务。