10.23 linux任务计划cron

时间:2022-04-27
本文章向大家介绍10.23 linux任务计划cron,主要内容包括Linux任务计划、任务计划、linux中计划的配置文件、启动crond服务、任务计划不执行的原因分析、任务计划备份、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

Linux任务计划

  • crontab -u、-e、-l、-r
  • 格式:分 时 日 月 周 user command
  • 文件/var/spool/cron/username
  • 分范围0-59,时范围0-23,日范围1-31,月范围1-12,周1-7
  • 可用格式1-5表示一个范围1到5
  • 可用格式1,2,3表示1或者2或者3
  • 可用格式*/2表示被2整除的数字,比如小时,那就是每隔2小时
  • 要保证服务是启动状态
  • systemctl start crond.service

crontab命令

  • crontab -e //编辑
  • crontab -l //列出 -crontab -r //删除
  • crontab -u username -l //指定用户

任务计划

  • crontab -e //编辑
  • 在linux系统中,系统计划是必不可少的,比如备份数据,重启服务等
    • 操作过程,可能是一个脚本,有可能是一个单独的命令,在特定的时间去执行它,所以任务计划是不可缺少的
  • 在windows中都是使用的个人电脑,所以任务计划很少见,几乎用不到

linux中计划的配置文件

  • cat /etc/crontab //查看任务计划的配置文件
    • 文件中会定义几个变量
      • SHELL=/bin/bash
      • PATH环境变量,它命令的路径
      • MAILTO发邮件给谁
[root@hanfeng ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)        //分钟
# |  .------------- hour (0 - 23)            //小时
# |  |  .---------- day of month (1 - 31)        //日期
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...        //月份,可以写数字,也可以写英文的简写
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat        //星期,0或7都表示周日,也可以写成英文的简写
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed        //用户,不写用户就是root 最后一列,是你要执行的命令

[root@hanfeng ~]# 
  • crontab -e 进入到crontab的配置文件中,用法和vim一样
    • 按 i 进入编辑模式
    • 分钟,小时,日,月,星期,然后后面跟具体的命令
    • 凌晨3点去执行,* 表示所有的意思
每天凌晨三点,执行123.sh脚本文件,正确的和错误的日志都输出到123.log文件中

0 3 * * *  /bin/bash  /usr/local/sbin/123.sh >/tmp/123.log 2>/tmp/123.log

因为是每天三点执行脚本,所以可以写成追加,每天都去记录日志

0 3 * * *  /bin/bash  /usr/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log

若想1-10号,双月去执行该脚本,后面就不在执行了——>只要 被2 整除,就符合条件

0 3 1-10 */2 *  /bin/bash  /usr/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log

只要周2和周5执行该文件

0 3 1-10 */2 2,5  /bin/bash  /usr/local/sbin/123.sh >>/tmp/123.log 2>>/tmp/123.log
  • 为什么没有年份?
  • 用星期确定你的唯一性,比如说今年的6月18号和明年的6月18号的星期肯定是不同的,这样就可以确定某一天的唯一性

启动crond服务

  • 若想要这个任务正常使用,还需要去启动crond服务
    • systemctl start crond.service //启动crond服务
  • 若想检查服务是否成功启动,
    • 方法一:可使用ps aux |grep cron 命令查看
      • 若有这个进程,说明这个服务已经启动了
    • 方法二:使用systemctl start crond 查看状态
      • 若是 绿色 ,则表示该服务已经启动了
      • 若是该服务已经停掉了,则不会有颜色

任务计划不执行的原因分析

  • 在写了一个计划,放入到配置文件中,但就是不执行
  • 不执行的原因很有可能是你写的脚本里面,没有使用 绝对路径 的原因导致不执行
    • 因为很有可能,你在使用的命令不在PATH里面,所以要么将命令写一个绝对路径,要么将命令的路径加入到PATH变量里面去
  • 建议:在写一个脚本的时候,都要写追加一个日志,这样可以保证这个任务有据可查,再不执行的时候,查看错误日志即可

任务计划备份

  • crontab -l //列出
  • crontab文件存在位置/var/spool/cron/username
  • 在需要备份的时候,直接把这个文件,或者目录拷贝下即可