在Linux系统中除了用户即时执行的命令操作以外,还可以配置系统在指定的时间、指定的日期自动执行预先计划好的管理任务。
在配置计划任务时,使用最多的是用crontab命令设置周期性任务,所谓周期任务就是可以按预设的周期重复执行,大大减轻设置重复性系统管理任务的工作量。启用周期性任务有一个前提条件,即对应的系统服务crond必须已经运行。
例确认系统服务crond已经运行。
[root@localhost ~]# service crond status
crond (pid 1772) 正在运行...
设置用户的周期性计划任务主要通过crontab命令进行,执行该命令会生成一个以用户名命名的配置文件,并自动保存在/var/spool/cron目录中。crontab命令的常用选项是“-e”,作用是编辑计划任务列表。执行“crontab –e”命令之后,将打开计划任务编辑界面(与vim中的操作相同)。通过该界面用户可以自行添加具体的任务配置,每行代表一个记录,每个记录包括6个字段,其格式为:
前面5个字段用于指定任务重复执行的时间规律,第6个字段用于指定具体的任务内容。crontab任务配置记录中,所设置的命令在“分钟+小时+日期+月份+星期”都满足的条件下才会运行
例:以root用户的身份设置计划任务,要求每周一的8:00查看/etc/passwd文件。
[root@localhost ~]# crontab -e
0 8 * * 1 /bin/ls /etc/passwd
在计划任务配置记录中的命令建议使用绝对路径,以避免因缺少执行路径而无法执行命令的情况。关于命令的绝对路径,可以使用which命令查找确认。
例:以root用户的身份设置一份计划任务列表,完成如下任务。
- 每天7:50自动开启sshd服务,22:50关闭sshd服务。
- 每隔5天清空一次FTP服务器公共目录“/var/ftp/pub”中的数据。
- 每周六的7:30重新启动系统中的httpd服务。
- 每周一、周三、周五的下午17:30,使用tar命令自动备份“/etc/httpd”目录。
[root@localhost ~]# crontab -e
50 7 * * * /sbin/service sshd start
50 22 * * * /sbin/service sshd stop
0 * */5 * * /bin/rm -rf /var/ftp/pub/*
30 7 * * 6 /sbin/service httpd restart
30 17 * * 1,3,5 /bin/tar zcvf httpd.tar.gz /etc/httpd
注意,在设置非每分钟都执行的任务时,“分钟”字段也应该填写一个具体的时间数值,而不要保留为默认的“*”,否则将会在每分钟执行一次计划任务。
使用“-u”选项可以为指定的用户设置计划任务。
例:为jerry用户设置计划任务,在每周日晚上的23:55将“/etc/passwd”文件的内容复制到主目录中,保存为“pwd.txt”文件。
[root@localhost ~]# crontab -e -u jerry
55 23 * * 7 /bin/cp /etc/passwd /home/jerry/pwd.txt
使用“-l”选项可以查看用户的计划任务列表,默认为当前用户。
例:查看root用户的计划任务列表:
[root@localhost ~]# crontab -l
50 7 * * * /sbin/service sshd start
50 22 * * * /sbin/service sshd stop
0 * */5 * * /bin/rm -rf /var/ftp/pub/*
30 7 * * 6 /sbin/service httpd restart
30 17 * * 1,3,5 /bin/tar zcvf httpd.tar.gz /etc/httpd
例:查看用户jerry的计划任务列表:
[root@localhost ~]# crontab -l -u jerry
55 23 * * 7 /bin/cp /etc/passwd /home/jerry/pwd.txt
使用“-r”选项可以删除用户的计划任务列表。
例:删除jerry用户的计划任务列表。
[root@localhost ~]# crontab -r -u jerry
[root@localhost ~]# crontab -l -u jerry
no crontab for jerry