上周遇上个需求,就是我写的程序需要部署到服务器上每天定时执行或需要统计类数据在服务器上定时生成,并存储MySQL 数据库。
简单点说就是需要写成定时任务,在Linux平台上如果需要实现任务调度功能可以通过编写cron脚本来实现,crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。系统管理员可以通过cron.deny 和 cron.allow 这两个文件来禁止或允许。
crontab [-u username] [-l|-e|-r]
参数:
u: 只有root才能进行这个任务,也即帮其他用户新建/删除crontab工作调度;
-e: 编辑crontab 的工作内容;
-l: 查阅crontab的工作内容;
-r: 删除所有的crontab的工作内容,若仅要删除一项,请用-e去编辑。
- 连接上linux服务器:根据自己使用的云服务器进行连接,ip地址,用户名和密码。
- 查看正在执行的crontab,用命令crontab -l ,就能够看到哪些任务之前一直在服务器上定时执行执行了。
- 输入命令crontab -e,在打开的页面中可以进入系统自带的Vim编辑模式,对定时任务进行编辑。
编辑的格式依次为:分 时 日 月 周 命令 。当分为*时,表示每分钟执行一次,时为*时,表示每小时执行一次。如果要设置没隔多久执行,则写为“*/数字”,在对应位置就代表每隔多久执行一次。
代表意义 分 时 日 月 周 命令
数字范围 0~59 0~23 1~31 1~12 0~7 命令
周的数字为0或7时,都代表星期天。
特殊字符
- *(星号) 代表任何时刻都接受。举例:日、月、周都是则就代表着不论何月、何日的周几的那个时间,都执行后续命令。
- ,(逗号) 代表分隔时段的意思。举例:如果要执行的工作是3:00与6:00,就可以写为:
0 3,6 * * * command
- -(减号) 代表一段时间范围内,举例来说,8点到12点之间的每小时的20分都需要执行:
20 8-12 * * * command
- /n(斜线) n代表数字,即每隔n单位间隔,例如每五分钟进行一次,则:
*/5 * * * * command
,用*与/5来搭配,也可以写成0-59/5。
举栗
00 7 * * * /bin/bash /home/bin/runSubmit2.sh ~/push/aitcReport.xml >>/home/log/tongji.log 2>&1
以上代码片表示,每天七点运行/home/bin/目录下的runSubmit2.sh文件,其配置文件为~/push/下的aitcReport.xml,运行的过程保存在/home/log/的日志文件tongji.log中。由于每天的日期不一样,因此需要在所运行的程序中将日期的变化为系统日期即可,不用在定时任务中修改。包括每天存储在SQL数据库中的需求也是类似,通过程序来对数据库进行结果的增加。
其他
编写一个脚本,修改已有文件中的内容,也可以使用sed -i来替换文本,这个具体没有仔细看过。
另外,其他写定时任务的方法也没深究,只解决了目前的问题。