crontab
1、crontab 的基本使用
# 列出用户的 crontab
crontab -l
# 第一次执行 `crontab -e` 会要求选择编辑器
crontab -e
# 自己选择编辑器 nano 、vim 等
select-editor
crontab 的 cron 表达式
*/5 * * * * # 表示每 5 分钟执行一次
2、定时拉取 github 上的代码
- 编写 pull 脚本
#!/bin/bash
# 设置代理
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890
cd /home/wangzhy/dev/github/picgo/
git pull
- 设置 crontab 计划任务
# 添加执行权限
chmod a+x pullpicgo.sh
# 编辑 crontab
crontab -e
# 添加计划任务
# crontab 的表达式语法和 Java 中的有点一样,没 20 s 执行一次
# */20 * * * * 等价于 0,20,40 * * * *
0,20,40 * * * * echo $PATH >> ~/script/logs/pullpicgo.log 2>&1 && /bin/bash ~/script/pullpicgo >> ~/script/logs/pullpicgo.log 2>&1 && echo $(date) >> ~/script/logs/pullpicgo.log
3、crontab 需要环境变量设置
2023.6.15 在设置阿里云盘自动签到的时候发现,单独执行脚本可以正确签到,但是在 crontab 计划任务中就无法执行。
查询 crontab 的执行日志
crontab 表达式
30 11 * * * /wangzhy/script/aliyunpan_checkin.sh
通过执行命令,查看 crontab 的执行日志发现,是执行了 aliyunpan_checkin.sh 脚本的。
cat /var/log/cron
(root) CMD (/wangzhy/script/aliyunpan_checkin.sh)
查询脚本的执行日志
通过修改 aliyunpan_checkin.sh ,把日志记录下来。
python3.11 app.py --do-not-reward >> /wangzhy/script/log/aliyum-auto-signin.log 2>&1
发现是因为 python3.11 命令不存在。
查询资料发现,crontab 的环境变量需要单独设置。
设置 crontab 的环境变量
- vim /etc/crontab (所有用户)
- crontab -e (当前登录用户)
设置环境变量的格式
PATH=/wangzhy/jdk/jdk-17.0.7/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/git/bin:/usr/local/git/bin:/root/bin
2024.11.15
# secu-tcs-agent monitor, install at Sun Apr 24 14:16:52 CST 2022
# PYTHONPATH=/usr/local/bin/python3.11
* * * * * /usr/local/sa/agent/secu-tcs-agent-mon-safe.sh > /dev/null 2>&1
*/5 * * * * flock -xn /tmp/stargate.lock -c '/usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &'
*/1 * * * * /wangzhy/blog/cloud-conf/linux_script/ssh_login_failed_host_deny.sh
0 * * * * /wangzhy/script/docker-restart-container.sh restart alist