用crontab创建个定时任务

Posted by Jeremy Song on 2021-08-17
Estimated Reading Time 3 Minutes
Words 809 In Total
Viewed Times

在Linux环境上创建定时任务时,我们可以使用 crontab 来实现。下面就来简单讲讲如何使用。

crontab

crontab 的参数及书写格式如下:

Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u <user>  define user
 -e         edit user’s crontab
 -l         list user’s crontab
 -r         delete user’s crontab
 -i         prompt before deleting
 -n <host>  set host in cluster to run users’ crontabs
 -c         get host in cluster to run users’ crontabs
 -s         selinux context
 -x <mask>  enable debugging

注:上面这个是命令帮助,相信大家都能看懂我就不翻译了(主要是我实在是太懒了 /(ㄒoㄒ)/~~)

其中最常用的例子如下

1
2
3
4
5
6
# 列出当前用户已有的任务列表
crontab -l
# 编辑当前用户的任务列表(最好不要使用这种方式修改,下面会给出一种比好的方式)
crontab -e
# 删除当前用户的任务列表
crontab -r

下面来举一个给当前用户新加一个任务的例子:

待执行的任务脚本:task.sh

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash

curDir=`pwd`
log=$curDir/task.log

main()
{
time=`date +%Y%m%d%H%M%S`
echo "${time} do something" >> $log
}

main #@

添加定时任务的脚本:addTask.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash

curDir=`pwd`
task=$curDir/task.sh
tmp=/tmp/cronTmp

if [ -f $task ]
then
chmod 750 $task
crontab -l | grep -v "$task" > $tmp > /dev/null 2>&1
echo "0-59 23 * * * $task > /dev/null 2>&1" >> $tmp
crontab $tmp

if [ -f $tmp ]
then
rm -f $tmp 2 > /dev/null
fi
fi

简单说一下crontab中的命令格式

例如(上面的 addTask.sh 脚本执行完的结果):

0-59 23 * * * /home/jeremysong/cron/task.sh > /dev/null 2>&1

上面的这个命令主要分为两部分,第一部分为运行周期的设定,第二部分则为执行的命令

基本语法有如下的定义:

*    *    *    *    *    command
分 时 日  月 周  命令

  • 第1列表示分钟1~59 每分钟用*或者 */1表示
  • 第2列表示小时1~23(0表示0点)
  • 第3列表示日期1~31
  • 第4列表示月份1~12
  • 第5列标识号星期0~6(0表示星期天)
  • 第6列要运行的命令

上述的例子表示为:每天的23点,每隔1分钟执行一次 task.sh

任务没有立即生效的解决办法

  1. 首先确认添加任务是否成功,可以使用 crontab -l 的方式查看当前的任务列表
  2. 确认定时任务执行的 command 是可执行的
  3. 使用 /etc/init.d/cron reload 重新加载任务列表
  4. 最后实在不行,可以使用 /etc/init.d/cron restart 重启服务

另外,crontab任务列表对应的文件为:

/var/spool/cron/tabs(注意:有的系统没有tabs这一层目录)

上述目录中存在的文件即为各个用户的 crontab 列表文件,例如:root、jeremysong

以上就是对 crontab 作的一些小总结。另外,crontab 的使用不仅局限与如此,配合其他参数还可以设定更加和你项目要求的定时任务。

最后

还是照旧,内容主要以科普内容为主。如果你对 crontab 不熟悉的话,不妨按照上面的过程自己动手试试。 (●ˇ∀ˇ●)


欢迎关注我的公众号 须弥零一,跟我一起学习IT知识。


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !