Linux中的定时任务:crontab

阅读 1.9k
标签: Linux

常常,我们需要让Linux定期执行一些任务,比如,每天凌晨2:00将数据库中的数据进行一次备份,我们需要用到crontab这个命令。

各参数的意义

crontab有一些常用的参数,可以输入crontab --help来进行查看用法,常用的参数有:

  • -e: 进入编辑模式,将进入vi编辑界面
  • -l: 显示当前用户的所有定时任务
  • -r: 删除当前用户的所有定时任务(注意:是所有)

一个简单的例子

既然知道了基本的参数,我们来编辑一个简单的任务来测试一下,输入:

crontab -e

进入vi界面,编辑如下内容:

0 2 * * * /root/bin/mongodump.sh

这样,就创建好了一条定时任务了,上面的内容表示啥意思呢?

它一共有6个参数,首先,看前5个参数,它表示定时任务的执行时间,最后一个表示需要执行的命令

前5个参数的表示的意义如下:

分钟小时日期月份
0~590~231~311~120~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

评论(0条)

(必填)
复制成功