8. Linux中任务计划

152 阅读3分钟

本系列都是是基于RedHat体系的,所以CentOS也可以用,但是Debian系列的可能会有些命令上的出入。

1. 一次性调度执行

schedule one-time tasks with at.【至少在lubuntu 20.04上已经没有了,Windows已经deprecated了】

$ at <timespec>
# <timespec>示例
# 	now + 5min
# 	teeeatime tomorrow (teatime is 16:00)
# 	noon + 4days
# 	5pm august 3 2029
# 	4:00 2019-11-27

$ at now +1min
at> useradd uuuu
at> <EOT> # Ctrl+D,这是结束输入

# 查询任务
$ atq

2. 循环调度执行

schedule recurring jobs with cron.

crontab一起使用,该命令从标准输入设备读取指令,并将其存于“crontab”文件中,以供之后读取和执行。执行周期循环命令。

basil@basil-2020:~/$ systemctl status cron.service 			# 查看cron程序运行情况
● cron.service - Regular background program processing daemon
     Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2021-01-08 09:31:04 CST; 5h 55min ago
       Docs: man:cron(8)
   Main PID: 531 (cron)
      Tasks: 1 (limit: 4431)
     Memory: 1.5M
     CGroup: /system.slice/cron.service
             └─531 /usr/sbin/cron -f

1月 08 13:17:01 basil-2020 CRON[1623]: pam_unix(cron:session): session opened for user root by (uid=0)
1月 08 13:17:01 basil-2020 CRON[1623]: pam_unix(cron:session): session closed for user root
  1. 创建计划

    crontab -e Edit jobs for the current user.

    这将会使用vim格式的编辑器去创建任务。

    格式* * * * * command。分时日月周,命令

    *:第一个minute(0-59),第二个hour(0-23),第三个day of month(1-31),第四个month(1-12),第五个day of week(0-6) OR sun, mon, tue, wed, thu, fri, sat

    命令最好写绝对路径。

    示例:

    5 * * * *       /mysql_back.sh		# 每年每月每日每小时的第5分钟执行。
    */5 * * * * 	/mysql_back.sh		# 每隔5分钟执行。*/<num> 每隔多长时间做什么事情。
    0 2 1,4,6 * * 	/mysql_back.sh	    # 每年每月的1,4,6日2点整执行。
    0 2 5-9 * * 	/mysql_back.sh		# 每年每月的5~9日2点整执行。
    * * * * * 		/mysql_back.sh		# 1分钟执行一次。
    0 * * * * 		/mysql_back.sh		# 每年每月每日每小时整执行。
    0 2 * * * 		/mysql_back.sh		# 每年每月每日2时整执行。
    0 2 14 * * 		/mysql_back.sh		# 每年每月14日2时整执行。
    0 2 14 2 * 		/mysql_back.sh		# 每年2月14日2时整执行。
    0 2 * * 5 		/mysql_back.sh		# 每年每周五2时整执行。
    一般不会全写,分时日月周,如果全写了则“分时日月”是一定执行一次,而该月每周“周”执行一次。
    
    00 02 * * * 	ls					# 每年每月每日2时整执行一次
    00 02 l * * 	ls					# 每年每月1日2时整执行一次
    00 02 l4 2 * 	ls					# 每年2月14日2时整执行一次
    00 02 * * 7 	ls					# 每年2月每周日2时整执行一次
    00 02 * 6 5 	ls					# 每年6月每周五2时整执行一次
    00 02 14 * 7 	ls					# 每年每月每周日2时整执行一次,每年每月14日2时整执行一次
    00 02 14 2 7 	ls					# 每年2月每周日2时整执行一次,每年2月14日2时整执行一次
    
  2. 查询计划

    crontab -l List the jobs for the current user.

    root用户可以使用-u username来管理其它用户的计划任务。

  3. 删除计划

    crontab -r Remove all jobs for the current user.