使用 crontab 设置 Linux 定时任务
crontab 是 Linux 的一个执行定时任务的程序。
当前用户配置 crontab 配置情况:
crontab -l
编辑用户配置文件:
crontab -e
以上命令是将设置写入用户级配置文件,以下方法可以直接修改系统级配置。
system wide 配置文件地址:/etc/crontab
配置文件文件格式:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/root
30 1 * * * root bash /root/backup.sh
前几个设置是 corn 执行环境设置,尤其是 PATH 和 HOME 需要正确设置才能保证部分命令正确执行。
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
30 1 * * * root bash /root/backup.sh
以上指令代表每天 1:30 执行脚本。每个字段的写法可以有多种类型:单一数字 数字段 数字组 数字间隔
单一数字,指定时间点运行:
30 1 * * * root bash /root/backup.sh
数字段,指定时间段运行:
30 1-6 * * * root bash /root/backup.sh
数字组,指定多个时间点运行:
30 1,3,5 * * * root bash /root/backup.sh
数字间隔,指定每隔多少时间执行:
*/30 * * * * root bash /root/backup.sh
0 */3 * * * root bash /root/backup.sh
加载环境变量:
默认情况下,crontab 里的定时任务不能调用 .bashrc
或者在其他自定义 env
文件中定义的环境变量,导致脚本手动执行的时候没问题,自动定时运行就会出错。
解决方法就是在 crontab 文件中定义环境变量,或者指定加载某个环境变量文件即可。
方法一:在定时任务中直接定义环境变量
* * * * * root LEARNING_FROM=baeldung LANG=es_US bash /etc/test.sh
方法二:通过 bash -l -c
以 login shell 方式运行脚本,这样会运行时自动加载 /etc/profile, ~/.bash_pofile, ~/.bash_login, ~/.profile 这几个配置文件
* * * * * root bash -l -c /etc/test.sh
注意以上方法依然没有加载 ~/.bashrc 文件,如果需要加载这个文件则需要通过 BASH_ENV 加载:
* * * * * root BASH_ENV=~/.bashrc bash -l -c /etc/test.sh
以上指令就相当于加载了所有的系统级初始化配置文件了。
方法三:通过 BASH_ENV 加载自定义环境变量文件
* * * * * root BASH_ENV=/etc/env_addon bash /etc/test.sh
env_addon 中是一些自定义的环境变量,如:
ENV1=abcd
ENV2=5678
参考链接:
How to Load Environment Variables in a Cron Job
标签:crontab