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.servicetieba.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.timersystemctl start tieba.timer,即可开机自启动和立刻拉起服务。

标签: systemd, crontab

添加新评论