Linux 定时任务

很久以前就想找到一种定时执行任务的方法,下面介绍一种在Linux下通用的,也是最方便的方式。

cron

这是Linux内核自带的一个定时执行任务的服务。默认是不打开,可以设置成开机自动启动。

要把cron设为在开机的时候自动启动,在 /etc/rc.d/rc.local 脚本中加入 /sbin/service crond start

这是一个周期性执行某个程序的服务,与at不同,at是一次性的服务。显然这个服务更常用一些。
很多周期性的任务,如定期清缓存,写磁盘,做备份等等。

我用这个命令来自动更新我github.io上的博客代码。

crontab

这是cron提供的一个命令,用来设定定时任务。
定时任务非常的简单,就是利用配置文件来描述什么时候执行什么动作,所以设定任务也就要写明白这些参数就可以了。

配置文件的基本格式

配置文件可以有很多个,存放在固定的目录下。服务启动以后会一起读取然后执行。

配置文件每行是一个定时任务的描述,包括6个字段:

  • 分(0-59),
  • 小时(0-23),
  • 天(1-31),
  • 月(1-12),
  • 星期(0-7,0和7都是周日)
  • 要执行的命令

举个例子:

1
2
3
4
5
6
7
0 8,22 * * 1-5 echo "Hello"

// 在周一到周五的8点和22点的时候输出”Hello“
//
// * 通配符
// 同一个字段多个值,用逗号隔开。
// 1-5表示一个区间

这个配置文件很好写,就不多举例子了。

启动服务

1
2
3
4
5
sudo /etc/init.d/cron start         // start

sudo /etc/init.d/cron stop // stop

sudo /etc/init.d/cron restart // restart

crontab 用法

使用:

1
2
3
4
crontab –e : 修改 crontab 文件,如果文件不存在会自动创建。 
crontab –l : 显示 crontab 文件。
crontab -r : 删除 crontab 文件。
crontab -ir : 删除 crontab 文件前提醒用户。

其中,-e是编辑当前用户的配置文件,默认是存放在/var/spool/cron/crontabs/目录下。
只要服务启动着,编辑保存这个文件,定时任务就设定好了,有的时候可能真正执行会有1-2分钟的延时。

注意事项

  • 这个服务是一个后台运行的服务,所以像上面那个输出”Hello“的例子就是没用的,因为没有办法输出到你的终端。一般我们会把交互的部分放在文件里。

  • 因为是个后台的进程,所以要把环境变量写成绝对的路径,不要以你的当前目录做参考,因为执行的时候是没有当前目录的。任何路径都要写绝对路径。

  • 要被执行的命令可以直接写在这里,也可以写在脚本里,任务写你的脚本路径,就是执行脚本,注意脚本要有执行权限。

解放劳动力的开始!

Talk is not cheap.