linux 定时任务 crond 服务应用指南(项目实例)

简介:

linux定时任务crond服务应用指南

Linux的定时任务crondcrontab)服务

1crond是什么?

crondlinux系统中用来定期执行命令或者指定程序的程序(软件)

2、秒级任务

         1crond需要方式实现

         2)自己写守护进程shell循环

         3Quartz也可实现妙计任务

3、定时任务的作用

         服务器:7*24小时开机提供服务是网站的基本特征

         有重要数据:提高备份周期和备份数量

 

Linux的定时任务分类

linux系统中定时任务调度的工作可以分为一下两种

1)系统自身的定期执行的任务

         系统周期性自行执行的任务工作。如轮询系统日志、备份系统数据、清理系统缓存等

[root@ysolin ~]# ls -l /var/log/messages*    系统的日志

-rw-------. 1 root root 201123 6月  28 14:44 /var/log/messages

-rw-------. 1 root root 200796 6月  26 03:49 /var/log/messages-20160626

系统自动轮询任务的设置配置路径:

[root@ysolin ~]# ls -l /etc/ |grep cron

-rw-------.  1 root root    541 11月 23 2013 anacrontab

drwxr-xr-x.  2 root root   4096 6月  24 18:13 cron.d

drwxr-xr-x.  2 root root   4096 9月  27 2011 cron.daily

-rw-------.  1 root root      0 11月 23 2013 cron.deny

drwxr-xr-x.  2 root root   4096 9月  27 2011 cron.hourly

drwxr-xr-x.  2 root root   4096 9月  27 2011 cron.monthly

-rw-r--r--.  1 root root    457 9月  27 2011 crontab

drwxr-xr-x.  2 root root   4096 9月  27 2011 cron.weekly

2)用户执行的定时任务

         某个用户或系统管理员定期要做的任务工作,用户执行放入任务工作,也就是我们运维管理人员执行的任务工作。

         例如:服务器时间同步

[root@ysolin ~]# crontab -l #查看定时任务

time sync by solin

*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1

2Linux系统下定时任务软件种类

1at适合执行一次就结束的调度任务。依赖服务atd

2anacron适合于非7*24小时开机的服务准备。anacron并不能指定具体时间执行任务工作,而是以天为周期或者在系统每次开机后执行的任务工作,它会检测服务器停机期间应该执行,但没有执行的任务工作,并将该任务执行一遍。

3crondcrond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务,若有会根据定义好的规则来执行这个定时任务。

注:

1crond服务是运行的程序,而crontab命令用户用来设置定时规则的命令

2crond服务是企业生产工作中常用的重要服务,atanacron很少使用,可以忽略。

定时任务crond使用说明

1、语法指令

crontab [-u user] {-l | -e | -r |-i}

查看帮助

[root@ysolin ~]# crontab --help

crontab: invalid option -- '-'

crontab: usage error: unrecognized option

usage:     crontab [-u user] file

      crontab [-u user] [ -e | -l | -r ]

           (default operation is replace, per 1003.2)

      -e    (edit user's crontab)

      -l    (list user's crontab)

      -r    (delete user's crontab)

      -i    (prompt before deleting user's crontab)

      -s    (selinux context)

2、指令说明

         通过crontab我们可以在固定的间隔时间执行指定的系统指令或script脚本。时间间隔的单位是分、时、日、月、周及以上的任意组合。

3、使用者权限文件

    文件                            说明

    /etc/cron.deny         #该文件中所列用户不允许使用crontab命令

    /etc/cron.allow        #该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny

    /etc/spool/cron/      #所有用户crontab配置文件默认都存在此目录,文件名以用户名命令

    注:

    crontab -e = vi /var/spool/cron/root

    crontab -l = cat /var/spool/cron/root

4、指令选项说明含义表

         -e      (edit user's crontab)                                              #编辑crontab文件内容

         -l       (list user's crontab)                                                #查看crontab文件内容

         -r      (delete user's crontab)                                         #删除crontab文件内容

         -i       (prompt before deleting user's crontab)          #删除crontab文件内容,删除前会提示。

         -u               #指定使用的用户执行任务

 

5、指令的使用格式

         1crond语法格式中时间段的含义

[root@ysolin ~]# cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

 

# 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

# |  |  |  |  |

# *  *  *  *  * user-name command to be executed

         2crontab语法格式中特殊符号含义

*    # *号,表示任意时间,如每分、每小时、每日、每月、每周

   -    # 减号,表示分隔符,表示一个范围区间

    # 逗号,表示分割时间段的意思。

/n    # n代表数字,即“每隔n单位时间”

         3crontab依赖服务

[root@ysolin ~]# chkconfig --list crond

crond            0:off 1:off 2:on  3:on  4:on  5:on  6:off

[root@ysolin ~]# /etc/init.d/crond status

crond (pid  1430) is running...

[root@ysolin ~]# ps -ef |grep crond | grep -v grep

root       1430      1  0 Jun28 ?        00:00:00 crond

[root@ysolin ~]# /etc/init.d/crond restart

Stopping crond:                                            [  OK  ]

Starting crond:                                            [  OK  ]

定时任务crond实例说明

范例1:每五分钟同步一次系统时间

[root@ysolin ~]# vi /var/spool/cron/root

[root@ysolin ~]# echo 'time sync by solin' >>/var/spool/cron/root

[root@ysolin ~]# echo '*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1' >>/var/spool/cron/root

[root@ysolin ~]# crontab -l

time sync by solin

*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1

范例2:每个月11020日的凌晨3:30分重启apache

30 3 1,10,20 * * /application/apache/bin/apachectl graceful

生产环境crond专业实例

         1、规范定时任务两例(练习)

         1)每分钟打印一次solil/var/log/solin.log

[root@ysolin ~]# crontab -e

      添加任务

      #print my name to log

      * * * * * echo solil >>/var/log/solin.log

 

[root@ysolin ~]# crontab -l

#time sync by solin

*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1

#print my name to log

* * * * * echo solil >>/var/log/solin.log

[root@ysolin ~]# cat /var/log/solin.log

solil

solil

solil

         2)周期任务使用脚本每周六、日上午九点和下午两点(周期)打印时间(格式:****-**-**

创建脚本

[root@ysolin ~]# date +%F

2016-06-29

[root@ysolin ~]# echo 'date +%F' >scripts/date.sh

[root@ysolin ~]# cat scripts/date.sh

date +%F

[root@ysolin ~]# sh scripts/date.sh

2016-06-29

设置定时任务

[root@ysolin ~]# echo "#print date " >>/var/spool/cron/root

[root@ysolin ~]# echo "00 09,14 * * 6,7 /bin/sh /root/scripts/date.sh >/dev/null 2>&1" >>/var/spool/cron/root

[root@ysolin ~]# crontab -l |tail -2

#print date

00 09,14 * * 6,7 /bin/sh /root/scripts/date.sh >/dev/null 2>&1

注:确保调用的命令是可执行的;路径需要绝对路径

2、书写crond定时任务基本要领

(1)为定时任务命令加必要的注释

  写定时任务规则时尽可能的加上注释(最好是英文英文注释),方便后期更高改,其他运维人员理解定时任务的内容

(2)执行脚本任务前加/bin/sh

  执行定时任务时,如果是执行脚本,请尽量在脚本后面带上/bin.sh命令,防止脚本没有执行权限而出错

(3)定时任务命令或脚本结尾加>/dev/null 2>&1

  2>&1表示让标准错误和标准输出一样,即把脚本正常和错误输出都都重定向到/dev/null,不记录任何输出。

  >/dev/null 2>&1等价于1>/dev/null 2>/dev/null 等价于 &>dev/null

  如果定时任务规则结尾不加>/dev/null 2>&1,很容易导致inode磁盘空间被占满,从而系统服务不正常。

(4)定时任务或层序最好在脚本里执行

(5)在指令用户下执行相关定时任务

  需要root权限执行的任务可以登录到root用户然后设置,如果不需要root权限,可以登录到普通用户(也可以直接在root下c’ron’tab -u solin -e的方式直接设置)设置。不同用户环境问题:如果调用了环境变量/etc/profile (如生产环境中java程序的定时任务),最好在程序脚本中,将用的到环境变量重新export下

(6)生产任务程序不要随意打印输出信息

  在开发定时任务程序或脚本时,在调试好脚本程序后,应尽量把DEBUG及命令输出的内容信息屏蔽掉,如果确实需要输出日志,可定向指定日志文件,避免产生系统垃圾。

(7)定时任务执行的脚本要规范路径/server/scripts

(8)配置定时任务规范操作过程,防止出错。

  首先要在命令行操作成功,然后复制成功的命令到脚本里,减少配置定时任务错误;

  然后测试脚本,测试成功后,复制脚本的规范路径到定时任务里;

  现在测试环境下测试,然后正式环境规范部署。

         3、系统定时任务配置

轮询日志

[root@ysolin ~]# ll /var/log/messages* #系统报错日志

-rw-------. 1 root root 201538 6月  29 19:48 /var/log/messages

-rw-------. 1 root root 200796 6月  26 03:49 /var/log/messages-20160626

[root@ysolin ~]# ll /var/log/secure* #安全信息和系统登录与网络连接的信息

-rw-------. 1 root root 8562 6月  29 23:43 /var/log/secure

-rw-------. 1 root root 6490 6月  26 01:45 /var/log/secure-20160626

[root@ysolin ~]# ls /etc/cron.daily/

logrotate

[root@ysolin ~]# cat /etc/cron.daily/logrotate # logrotate 程序是一个日志文件管理工具

#!/bin/sh

 

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1

EXITVALUE=$?

if [ $EXITVALUE != 0 ]; then

    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"

fi

exit 0

[root@ysolin ~]# cat /etc/logrotate.conf # logrotate 的配置文件

# see "man logrotate" for details

# rotate log files weekly

weekly

 

# keep 4 weeks worth of backlogs

rotate 4

 

# create new (empty) log files after rotating old ones

create

 

# use date as a suffix of the rotated file

dateext

 

# uncomment this if you want your log files compressed

#compress

 

# RPM packages drop log rotation information into this directory

include /etc/logrotate.d

 

# no packages own wtmp and btmp -- we'll rotate them here

/var/log/wtmp {

    monthly

    create 0664 root utmp

      minsize 1M

    rotate 1

}

 

/var/log/btmp {

    missingok

    monthly

    create 0600 root utmp

    rotate 1

}

 

# system-specific logs may be also be configured here.

         4、企业生产环境如何调试crond定时任务(个人建议)

         1)增加执行频率调试任务

                   在调试时,把任务执行周期缩短,测试出定时任务效果

                   规范的操作流程(开发和运维人员):

                            个人的开发配置环境è办公室的测试环境èIDC机房的测试环境èIDC机房的正式环境

         2)调整系统时间调试任务(不能用于生产环境)

                   把系统的时间调整为定时任务执行的前五分钟,确保定时任务能够正确执行。

         3)通过日志输出调试定时任务

                   在脚本中加入日志输出,然后把输出打到指定的日志中,然后观察日志内容结果,看是否执行或正确执行。

         4)注意一些任务命令带来的问题

          如:*/1 * * * * * echo “Hello Word” >> /tmp/solin.log >/dev/null 2>&1

        因前面已经有了重定向,后面要去掉/dev/null 2>&1

         5)注意环境变量导致的定时任务故障

                   在调试java程序的时候,注意环境变量,把环境变量的定义加到脚本里

         6)通过crond定时任务服务日志调试定时任务

[root@ysolin ~]# tail -f /var/log/cron

Jun 30 02:00:01 ysolin CROND[3537]: (root) CMD (/sbin/ntpdate time.windows.com >/dev/null 2>&1)

Jun 30 02:01:01 ysolin CROND[3541]: (root) CMD (run-parts /etc/cron.hourly)

Jun 30 02:01:01 ysolin run-parts(/etc/cron.hourly)[3541]: starting 0anacron

Jun 30 02:01:01 ysolin anacron[3550]: Anacron started on 2016-06-30

Jun 30 02:01:01 ysolin anacron[3550]: Jobs will be executed sequentially

Jun 30 02:01:01 ysolin anacron[3550]: Normal exit (0 jobs run)

Jun 30 02:01:01 ysolin run-parts(/etc/cron.hourly)[3552]: finished 0anacron

Jun 30 02:05:01 ysolin CROND[3555]: (root) CMD (/sbin/ntpdate time.windows.com >/dev/null 2>&1)

Jun 30 02:10:01 ysolin CROND[3559]: (root) CMD (/sbin/ntpdate time.windows.com >/dev/null 2>&1)

Jun 30 02:15:01 ysolin CROND[3563]: (root) CMD (/sbin/ntpdate time.windows.com >/dev/null 2>&1)

crond定时任务生产应用问题10箴言

1、系统环境变量问题

2、定时任务绝对路径

3、脚本权限问题加/bin/sh

4、时间变量问题用反斜线

5>/dev/null 2>&1,防止磁盘空间(inode)被占满

6、定时任务规则之前加注释

7、使用脚本程序代替命令行定时任务

8、避免不必要的程序及命令输出

9、切到目标目录的上一级打包目标

10、定时任务脚本中的程序命令用全路径

crond生产环境案例及解决过程

1No space left on davice生产环境故障

问题描述:

      工作中设置crontab定时任务时任务规则保存时,提示“No space left on davice”,此时df -h检查磁盘,发现磁盘有空余空间,用df -i检查则发现/var目录已占用100%的inode数量。

最后检查发现/var/spool/clientmqueue/下有大量的文件,执行cd /var/spool/clientmqueue ;rm -f * 自动跳出,无法删除

故障分析:

      当系统中crond定时任务执行的程序有输出内容时,输出的内容会以邮件的形式放送给crond的用户(默认是root),而sendmail等服务没有开启的时,这些邮件内容就会在邮件队列临时目录中产生文件,导致消耗inode数量,一旦indode数量耗尽就会导致系统无法写入文件而报错:No space left on davice

解决方式:

1)删除目录或文件

[root@ysolin ~]# cd /var/spool/clientmqueue && ls |xargs rm -f

或者

[root@ysolin ~]# cd /var/spool && rm -rf clientmqueue

[root@ysolin ~]# mkdir clientmqueue && chmod 770 clientmqueue && chown smmsp.smmsp -R /var/spool/clientmqueue

2)修改定时任务,添加 >/dev/null 2>&1

 

2No space left on davice生产环境故障

理论:

inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。

而inode,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。

常见问题:No space left on device

解决思路

1)查看分区使用情况:

[root@ysolin ~]# df -lk

查看分区使用情况

2)查看inode使用信息:

[root@ysolin ~]# df -i

#查看inode使用信息

解决方式:

(1)find锁定占用空间最大的目录(通常目录大小越大,表示目录下的文件越多)

(2)删除多余的inode节点。(find /xxx -type f -exec rm {} \;)

如:

查看系统空间使用最多的文件

find / -type f -size -1k | xargs -i dirname {} | sort  -nr| uniq -c | sort -nr | tail

删除:(一定要确定是自己的站点,而且所删除的东西已经不重要)

find /路径/路径 -size -1k -type f | xargs rm -f

 










本文转自 运维小当家 51CTO博客,原文链接:http://blog.51cto.com/solin/1860317,如需转载请自行联系原作者
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
8月前
|
Linux 网络安全 Docker
盘古栈云,创建带ssh服务的linux容器
创建带ssh服务的linux容器
446 146
|
9月前
|
缓存 安全 Linux
六、Linux核心服务与包管理
在没有网络的情况下,使用系统安装光盘是获取RPM包的常用方法。场景二:配置本地文件镜像源 (使用系统安装光盘/ISO)(检查RPM包的GPG签名以保证安全) 或。YUM/DNF包管理工具 (yum/dnf)(此处可以放置您为本主题制作的思维导图)处理依赖问题的危险选项 (应极力避免)(覆盖文件、替换已安装包)。(list) 则是列出文件。(query file) 是。(假设系统安装光盘已挂载到。信息 (verbose)。(upgrade) 选项。(all) 已安装的包。(package) 选项
634 11
|
11月前
|
安全 应用服务中间件 网络安全
在Linux环境部署Flask应用并启用SSL/TLS安全协议
至此,你的Flask应用应该能够通过安全的HTTPS协议提供服务了。记得定期更新SSL证书,Certbot可以帮你自动更新证书。可以设定cronjob以实现这一点。
759 10
|
11月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
1003 13
|
Java 关系型数据库 MySQL
在Linux平台上进行JDK、Tomcat、MySQL的安装并部署后端项目
现在,你可以通过访问http://Your_IP:Tomcat_Port/Your_Project访问你的项目了。如果一切顺利,你将看到那绚烂的胜利之光照耀在你的项目之上!
586 41
|
10月前
|
存储 数据采集 监控
ubuntu(linux)系统主要应用于哪些工业场景中?研维三防ubuntu系统的手持工业三防平板电脑在哪些行业中有实际应用
Ubuntu 系统凭借其独特的优势,在众多工业场景中得到了广泛应用,为工业数字化、智能化发展提供了有力支持。而研维三防基于 Ubuntu 定制系统的手持工业三防平板电脑,更是将 Ubuntu 系统的优势与工业级的性能、坚固耐用性完美结合,在电力、物流、制造等多个行业中展现出强大的应用价值,助力企业提高生产效率、优化管理流程、提升产品质量,成为推动工业现代化发展的重要力量。随着技术的不断进步与创新,相信 Ubuntu 系统以及研维三防这类工业级设备将在更多的工业领域中发挥更大的作用,为工业发展带来更多的机遇与变革。
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
2028 25
|
Linux iOS开发 MacOS
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
447 0
Gitea Enterprise 23.4.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务
|
机器学习/深度学习 安全 Linux
Linux 主要应用领域的归纳
服务器领域 Linux在服务器领域的应用是其最为广泛和成熟的领域之一。由于其开源、稳定、高效和安全的特性,Linux成为许多企业服务器的首选操作系统。 Web服务器:Linux是Web服务器的理想选择,因为它支持Apache、Nginx等流行的Web服务器软件,这些软件在Linux上运行稳定且性能卓越。Linux服务器可以高效地处理大量并发请求,提供快速、可靠的Web服务。 数据库服务器:Linux也广泛用于数据库服务器,如MySQL、PostgreSQL和Oracle等数据库管理系统在Linux上运行良好。Linux的稳定性和安全性使得它成为存储和管理敏感数据的理想平台。 邮件服务器:Lin
806 5
|
监控 Linux
Linux systemd 服务启动失败Main process exited, code=exited, status=203/EXEC
通过以上步骤,可以有效解决 systemd 服务启动失败并报错 `Main process exited, code=exited, status=203/EXEC` 的问题。关键在于仔细检查单元文件配置、验证可执行文件的有效性,并通过日志分析具体错误原因。确保可执行文件路径正确、文件具有执行权限,并且可以独立运行,将有助于快速定位和解决问题。
6552 7