使用crond 在linux中定时执行任务定期运行程序或者脚本是管理员要面临一个很普遍的问题一、 使用crond监控程序运行程序1. 使用cron来定期执行任务使用crond (cron监控程序)来定期运行一些任务,比如备份日志、数据库、把日志发送到自己邮箱等等操作都可以又定期运行程序来完成。
crond是个脚本,每次Linux启动的时候都自动起到该脚本,该脚本是/etc/rc.d/init.d 下面的,每次系统启动的时候就自动会启动该目录下的脚本。
cron有两个配置文件,一个/etc/crontab,是一个全局配置文件,一组是crontab命令生成生成的配置文件,是属于用户级的。
一般对管理员来说,只要使用全局配置的/etc/crontab就配置文件就可以了,我们去打开配置文件看看:SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# run-parts01 * * * * root run-parts /etc/cron.hourly02 4 * * * root run-parts /etc/cron.daily22 4 * * 0 root run-parts /etc/cron.weekly42 4 1 * * root run-parts /etc/cron.monthly我们稍微来分析一下这个文件:/* 设置基于shell来运行,我们这里是基于bash shell */SHELL=/bin/bash/* 指定目录中有此文件的命令时,不需要完整目录路经 */PATH=/sbin:/bin:/usr/sbin:/usr/bin/* 使用cron实际工作时,将通过邮件来通知root用户 */MAILTO=root/* 与/etc/crontab配置文件相关的主目录为根目录 */HOME=//* 好了,这里是关键是,下面的是要指定什么时间运行什么目录下的任务,run-parts命令是运行指定目录下的每个脚本 */# run-parts/* 这一句是在每天每小时过后一分钟运行/etc/cron.hourly目录中的每个脚本文件 */01 * * * * root run-parts /etc/cron.hourly/* 在每天凌晨4点2分运行/etc/cron.daily目录中的每个脚本文件 */ 02 4 * * * root run-parts /etc/cron.daily/* 在每个星期天凌晨4点22分运行/etc/cron.weekly目录中的每个脚本文件 */22 4 * * 0 root run-parts /etc/cron.weekly/* 在每个月的第一天凌晨4点42分运行/etc/cron.monthly目录中的每个脚本文件 */42 4 1 * * root run-parts /etc/cron.monthly大家看到里面的"*"一定觉得很奇怪,下面我们句稍微来了解一下cron 的语法:上面脚本中的时间是从左到右的,分别列出了五个字段,我们看下面的表:------------------------------------------------字段 取值范围------------------------------------------------Minute 0 ~ 59Hour 0 ~ 23,其中0是午夜,20是晚上8点Day 1 ~ 31Month 1 ~ 12Day of week 0 ~ 7,其中0和7是表示星期天------------------------------------------------任何字段中的星号是通配符,例如,如果第一个字段包括星号,则特定若无其事在可能的每一分钟运行。
如果要指定时间范围,比如上午8点到下午4点,则可以见第二个字段设置为8~16。
如果要隔一天运行任务,则可以将第三个字段设置为*/2。
可以看出,如果五个字段(minute、hour、day、month、day of week) 之后,cron中的每个字段就没什么神秘之处了。
2. 用户自己的cron用户也可以计划用户自己的cron任务,比如他想要在半夜整理他的文件,然后发送邮件给自己,只要这个用户他没有在/etc/cron.deny表中,就可以使用crontab -e命令来启动自己的cron文件。
3. 对cron的访问控制默认情况下,所有用户都能访问cron工具,要对cron进行访问控制,则可以生成/etc/cron.allow与/etc/cron.deny文件。
(1)这两个文件都不存在时,每个用户都可以访问cron工具](2)存在/etc/cron.allow文件时,则只有cron.allow文件中允许的用户才能访问cron工具,如果也有/etc/cron.deny文件,则忽略cron.deny 文件二、 使用at命令定期运行程序1. 使用cron运行任务cron任务的缺点是计划要经常运行,假如我们只是想要让特定任务运行一次呢?那么,这时候就要用到at监控程序了。
设置at命令很简单,指示定运行的时间,那么就会在哪个时候运行。
at 类似打印进程,会把任务放到/var/spool/at目录中,到指定时间运行它 .at命令相当于另一个shell,运行at time命令时,它发送一个命令,可以输入任意命令或者程序。
at now + time命令可以在指示任务。
假设处理一个大型数据库,要在别人不用系统时去处理数据,比如凌晨2点5分。
那么我们就应该先建立/home/mj/airplane脚本管理数据库,计划处理/home/mj/air-safe文件中的结果。
正常方式是这样启动下列命令:# at 2:05 tomorrowat> /home/mj/airplane > /home/mj/air-safeat> Ctrl+DAT Time中的时间表示方法-----------------------------------------------------------------------时间 例子 说明-----------------------------------------------------------------------Minute at now + 5 minutes 任务在5分钟后运行Hour at now + 1 hour 任务在1小时后运行Days at now + 3 days 任务在3天后运行Weeks at now + 2 weeks 任务在两周后运行Fixed at midnight 任务在午夜运行Fixed at 10:30pm 任务在晚上10点3Linux 通过脚本执行Java程序最近在Linux上定时执行脚本程序的要求越来越多了,今天的任务是:在Linux服务器上编一个脚本,并定时执行该脚本(脚本的目的执行一个java程序,要求java程序要打成jar包)。
1.编写java程序(公司要求我要读取一个txt文件,并将txt文件的不同的ip做一个统计在存放到一个新的txt文件中)由于要统计不同的IP,代码中应用了HashSet来存放IP地址。
上述Java程序是在Windows下编写的,如果在Linux服务器上运行,只需要把上面文件的路径和文件更换了就可以了。
2.编写好java程序后,将java程序打成jar文件(环境Linux)我将上述测试好的java类上传到了Linux服务器上,考虑到服务器的路径与windows下的路径不同所以我在服务器上将上述代码更改为服务器上的代码了。
(1) 修改文件路径Java代码sudo vim Test1.java(2) 生成.class文件Java代码javac Test1.java(3) 创建一个.mf文件,并编辑该文件Java代码sudo touch Test1.mfJava代码sudo vim Test1.mfTest1.mf文件内容如图:(4) 打.jar包Java代码jar cfm test1.jar Test1.mf *.class执行完上述命令,文件夹中会多一个test1.jar文件Java代码java -jar test1.jar测试你的jar是否成功,如果成功会有一个123.txt文档。
(5) 编写一个Linux脚本执行第四步命令(写此脚本的目的是方便以后Linux可以定时执行脚本)新建一个.sh文件Java代码sudo touch test.sh编辑该test.sh文件 文件内容如图:Java代码sudo chmod 777 test.shJava代码./test.sh上面就把Linux执行java程序介绍完了,关于如何执行脚本可以参考/Linux/2010-06/26534.htm 本文用的的文件可以在附件中下载其中welcomelog.txt为原始文件,123.txt为程序生成文件。
附件下载Ubuntu定时执行.sh脚本在Ubuntu中备份svn上传的代码,将备份的文件命名为svn_backup+当前时间.dump文件(例svn_backup20100525.dump)1.编写脚本文件(backup.sh)sudo touch backup.sh创建脚本文件,并编辑文件sudo vim backup.sh上图为配置的文件内容,代码如下:#!/bin/shsudo svnadmin dump /srv/svn/repos/works >/home/jordy/svn_back_up$(date + %Y%m%d).dumpecho success!中间那句是将/srv/svn/repos/works 目录下的代码备份到/home/jordy/目录下,文件名为svn_backup+当前时间.dump文件,最后一句只是提示备份成功,可以删掉。
使用命令sh -x backup.sh测试脚本是否成功。
上面脚本文件编写完成后,下面执行定时任务:sudo vim /etc/crontab如图代码中的最后一行,其中:是表示备份的时间,按照 m h dom mon dow 填写,我的测试时每一分钟执行一次backup.sh脚本文件。
操作结束,可以去相应的目录下查看备份文件是否生成。
linux定时任务的设置为当前用户创建cron服务1. 键入 crontab -e 编辑crontab服务文件例如文件内容如下:*/2 * * * * /bin/sh /home/admin/jiaoben/buy/deleteFile.sh 保存文件并并退出*/2 * * * * /bin/sh /home/admin/jiaoben/buy/deleteFile.sh*/2 * * * * 通过这段字段可以设定什么时候执行脚本/bin/sh /home/admin/jiaoben/buy/deleteFile.sh 这一字段可以设定你要执行的脚本,这里要注意一下bin/sh 是指运行脚本的命令后面一段时指脚本存放的路径2. 查看该用户下的crontab服务是否创建成功,用 crontab -l命令3. 启动crontab服务一般启动服务用 /sbin/service crond start 若是根用户的cron服务可以用 sudo service crond start,这里还是要注意下不同版本linux 系统启动的服务的命令也不同,像我的虚拟机里只需用 sudoservice cron restart 即可,若是在根用下直接键入service cron start就能启动服务4. 查看服务是否已经运行用 ps -ax | grep cron5. crontab命令cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数crontab -l //列出某个用户cron服务的详细内容crontab -r //删除没个用户的cron服务crontab -e //编辑某个用户的cron服务比如说root查看自己的cron设置:crontab -u root -l再例如,root想删除fred的cron设置:crontab -u fred -r在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt任务调度的crond常驻命令crond 是linux用来定期执行程序的命令。