Linux系统定时任务

一、什么是定时任务?

周期性的执行任务计划的软件,Linux定时任务的常用软件crond.

二、使用定时任务软件,按需重复执行工作。

例如:备份都是0点以后,2点爬起来备份,4点以后睡觉。
需要写一个程序实现自动备份,然后让定时任务软件帮你执行。

三、如何使用

1)用户定时任务计划
cron是定时任务的软件名。
crond是服务进程名,真正实现定时任务服务。
crontab命令是用来设置定时任务规则的配置命令。

要想配置定时任务,首先启动cron服务

[root@app1 logrotate.d]# systemctl status crond
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-06-10 19:56:50 CST; 17min ago
 Main PID: 6567 (crond)
   CGroup: /system.slice/crond.service
           └─6567 /usr/sbin/crond -n

Jun 10 19:56:50 app1 systemd[1]: Started Command Scheduler.
Jun 10 19:56:51 app1 crond[6567]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 36% if used.)
Jun 10 19:56:51 app1 crond[6567]: (CRON) INFO (running with inotify support)

crond服务命令

systemctl start crond.service
systemctl stop crond.service
systemctl enable crond.service
systemctl disable crond.service

内容存放位置/var/spool/cron/
以当前用户名作为文件名
-l 查看已经设置的定时任务
-e 编辑定时任务
-u 查看特定用户下定时任务

编写定时任务的语法

[root@app1 cron]# 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
# |  |  |  |  |
# *  *  *  *  *  command to be executed

共六列:
第一列:分minute (0 - 59)
第二列:时hour (0 - 23)
第三列:日day of month (1 - 31)
第四列:月month (1 - 12)
第五列:周day of week (0 - 6)
第六列:要执行的任务命令或程序
特殊符号:

  • 表示的 每或每一 的意思
    00 23 * * * cmd 每天23点00分执行任务
  • 连续区间 1-10
    00 8-23 * * * cmd 每天8点至23点,每小时执行任务
    , 列举 1,2,3,4,8
    00 1,2,3,4,8 * * * cmd 每天1点、2点、3点、4点、8点执行任务
    /n n是数字,每隔n单位时间
    */10 * * * * cmd 每隔10分钟执行一次任务
    30 */6 * * * cmd 每隔6小时的30分执行任务
    30 8-12/2 * * * cmd 每天8点至12点,每隔2小时的30分执行任务
    45 4 1,10,22 * * cmd 每月1号、10号、22号4点45分执行任务
    10 1 * * 6,0 cmd 每周六周日1点10执行任务
yum install ntpdate
crontab -e
*/5 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null

日志信息
/var/log/cron

备注:执行命令最后编写脚本,由cron调用脚本执行定时任务。

2)系统定时任务计划

[root@app1 logrotate.d]# ll /etc/cron.daily/logrotate /etc/logrotate.conf 
-rwx------. 1 root root 219 Oct 31  2018 /etc/cron.daily/logrotate
-rw-r--r--. 1 root root 662 Jul 31  2013 //etc/logrotate.conf

四、定时任务书写要领

1)为定时任务添加注释
2)所有定时任务尽量都以脚本的形式执行
3)在执行的shell脚本前加上/bin/sh
4)定时任务中命令或脚本的结尾加 >/dev/null 2>&1
5)在指定用户下执行相关定时任务
6)生产任务计划程序中不要随意打印输出信息,有输出的法办法去掉
7)定时任务执行脚本要存放到规范路径下
8)配置定时任务要规范操作过程,减少出错
9)定时任务脚本中程序命令及路径尽量用全路径
10)时间变量%号要用反斜线转义(只有定时任务里时间命令需要)
11)若脚本中调用了系统环境变量,要重新定义
12)出错或无法执行,检果/var/log/cron日志

五、案例分析

1)环境变量问题
定时任务在执行脚本的时候,多数情况没办法加载环境变量,特别是/etc/profile。
登陆后测试成功,但是添加到定时任务时无法执行。
分析:
命令行以bash登陆
手工登陆后,加载所有环境变量
(/.bash_profile,/.bash_rc,/etc/profile,/etc/bashrc)
定时任务执行脚本属于非登陆状态
解决:
定时任务脚本添加export环境变量

2)No space left on device故障
磁盘满的报错,原因往往是inode被占满。
df -i
分析:
因为定时任务没有加&>/dev/null,定时任务执行的时候把输出给系统root发邮件。 邮件服务器postfix服务默认关闭,所以给系统发的邮件就会产生在临时目录(产 生大量小文件)。
cent6 /var/spool/clientmqueue
cent7 /var/spool/postfix/maildrop/

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容