跳到主要内容

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 的环境变量

  1. vim /etc/crontab (所有用户)
  2. 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