巧用Crontab

  Linux
  • crontab的用法

相对与 at,crontab 的优点就是能够周期性的执行某个命令,at 却只能执行一次。

crontab 的后台进程名字是 crond ,cron 也是系统服务。我们先简单介绍下 cron 的使用命 令,然后来在结合实例讲解

制定个人计划任务

#crontab -e 编辑当前用户的 cron 表

#crontab -l 查看当前用户的 cron 表

#crontab -r 删除当前用户的 cron 进程

#crontab -u 用户名 以某用户的身份来控制 cron 表

还有个重要的知识点,就是当用户的计划任务建立后是存放在 var/spool/cron 这个目录。

1、编辑用户的计划任务列表

当使用 crontab -e 编辑当前用户的 cron 表后,会出现一个类似 vi 界面,cron 的格式

是这样的。分成两列,左边是时间,右边是运行的命令。时间是由 5 个部分组成。

例:* * * * * wall hello everyone

5 个星号分别代表:minute hour day-of-month month-of-year day-of-week ,而 wall hello

everyone 这是命令内容。上面的意识是每分每小时每天每月每周广播 hello everyone。

记法口诀:分时天月周1

分钟 小时 日 月 周 [用户名] 命令

这里的 5 个星号就代表的时间和日期:

第一个*星号代表个小时的第几分钟:minute 范围是从 0-59

第二个*星号代表每天的第几个小时:hour 范围是从 0-23

第三个*星号代表每月的第几个日:day-of-month 范围从 1-31

第四个*星号代表没年的第几个月:month-of-year 范围从 1-12

第五个*星号代表每周的星期几:day-of-week 范围从 0-6,其中 0 表示星期日

用户名:也就是执行程序要通过哪个用户来执行,这个一般可以省略;

命令:执行的命令和参数。

除了“*”以外,还可以用“-”、“,”、“/”与数字构成表达式来表示复杂的时间关系。

 – :可以表示一个连续的时间范围,如 1-4。

 ,:可以表示间隔不连续的时间范围,如 3,5,7。

 /:可以指定间隔的频率,如分钟字段中的 */4 ,表示每隔 4 分钟。

例如:

请写出下列任务时间是什么? 请写出下列要求的时间

0 23 * * * 每天的 23 点整 周一到周五每天 17:00 0 17 * * 1-5

30 12,0 * * * 每天的 12:30 和 00:30 每周一、三、五的 8 点 30 分 30 8 * * 1,3,5

0 22 1 1-12 * 1-12 月每月 1 号 22 点整 8 点到 18 点之间每隔 2 小时 * 8-18/2 * * *

*/5 * * * * 每 5 分钟 每隔 3 天 * * */3 * *

  • 举列说明

下面举例来学习用户计划任务的编辑。

例:由 root 用户设置一份 crontab 计划任务列表,完成以下任务

 每天早上 7:50 自动开启 sshd 服务,22:50 关闭 sshd 服务。

 每隔 5 天清空一次 FTP 服务器的公共目录/var/ftp/pub 中的数据。

 每周六的 7:30 重启 httpd 服务。

 每周一、三、五的下午 17:30,使用 tar 命令自动备份 /etc/httpd 目录。

# crontab –e

50 7 * * * /usr/bin/systemctl start sshd

50 22 * * * /usr/bin/systemctl stop sshd

0 * */5 * * /usr/bin/rm –rf /var/ftp/pub/*

30 7 * * 6 /usr/bin/systemctl restart httpd

30 17 * * 1,3,5 /usr/bin/tar jcvf httpd.tar.bz2 /etc/httpd

例:为用户 zxuser 设置计任务,每周日周晚上 23:55 将/etc/passwd 文件内容复制到宿主

目录中,保存为 pwd.txt。

# crontab –e – U zxuser

55 23 * * 7 /usr/bin/cp /etc/passwd /home/zxuser/pwd.txt

2、查看用户的计划任务列表

例:查看 root 用户的计划任务列表的内容。

# crontab -l

例:查看用户 zxuser 的计划任列表的内容。

# crontab –l -U zxuser

3、删除用户的计划任务列表

例:删除 root 用户的计划任务列表的内容。

# crontab -r

4、如何使要限制某个用户,不能用 cron 计划任务,如何办到?

vim /etc/cron.deny

 写入用户即可。

例:配置 cron access。liweijie 不能使用 cron。这个限制不能影响其他任何用户

vim /etc/cron.deny

liweijie #添加该用户

su – liweijie

crontab –e #验证,是否可以做任务计划

在设置用户的 crontab 计划任务的过程中,由于每一条记录只能运行一行命令,难以完成更复杂的系统管理任务,因此在实际工作中,通常是先编写脚本文件,再用计划任务配置中加载脚本文件执行.

EX:

0 0 * * 1 cp -Rpf /var/www/* /root/wpbak/db_name #每周一的零点复制文件到指定文件夹

0 0 * * 1 mysqldump -u root db_name > /root/wpbak/export.sql #每周一的零点备份Mysql数据库

  • 查询Crontab的日志 (针对于Ubuntu 22.04)

journalctl -u cron.service 查询所有的日志

journalctl -u cron.service | grep cp 筛选查询日志

journalctl -u cron.service | grep mysqldump

EX:

LEAVE A COMMENT