Linux中的定时任务:crontab
阅读 1.9k
常常,我们需要让Linux定期执行一些任务,比如,每天凌晨2:00将数据库中的数据进行一次备份,我们需要用到crontab这个命令。
各参数的意义
crontab有一些常用的参数,可以输入crontab --help
来进行查看用法,常用的参数有:
- -e: 进入编辑模式,将进入vi编辑界面
- -l: 显示当前用户的所有定时任务
- -r: 删除当前用户的
所有
定时任务(注意:是所有)
一个简单的例子
既然知道了基本的参数,我们来编辑一个简单的任务来测试一下,输入:
crontab -e
进入vi界面,编辑如下内容:
0 2 * * * /root/bin/mongodump.sh
这样,就创建好了一条定时任务了,上面的内容表示啥意思呢?
它一共有6个
参数,首先,看前5个
参数,它表示定时任务的执行时间
,最后一个表示需要执行的命令
。
前5个参数的表示的意义如下:
分钟 | 小时 | 日期 | 月份 | 周 |
---|---|---|---|---|
0~59 | 0~23 | 1~31 | 1~12 | 0~7 |
所以,上面的定时任务表示,每天凌晨2:00执行mongodump.sh脚本。
注意事项
当任务执行后,默认会给当前用户的邮箱(在/var/spool/mail
)中发送一封邮件,这样用户可以方便地知道任务是否执行成功了,需要注意的是,如果你选择的是用shell脚本执行命令,那么要注意环境变量
的问题,比如,上面的命令中,就提示报错了:
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <20220623024902.1126B30028DE@localhost.localdomain>
Date: Thu, 23 Jun 2022 10:49:02 +0800 (CST)
/root/bin/mongodump.sh: line 5: mongodump: command not found
提示说,mongodump找不到,而实际上,mongodump这个命令已经被我软链接到/usr/local/bin目录中,但在实际执行时,cron的PATH变量为/usr/bin:/bin
,所以,自然就找不到了,可以在mongodump.sh中直接用绝对路径
:
/usr/local/src/mongodb-tools/bin/mongodump --uri=mongodb://127.0.0.1:27017
或者,修改crontab的PATH变量:
vi /etc/crontab
将其中的PATH中添加/usr/local/bin就好了,这样,定时任务就能正确执行了。
参考
- 《鸟哥的Linux私房菜,基础学习篇(第四版)》,鸟哥著
最后编辑于: 2022-06-23