定时任务通关攻略——2.Liunx系统和Windows系统定时任务

社区后端
Liunx系统

一、简介

Linux系统任务是由 cron (crond) 这个系统服务来控制的,这个系统服务是默认启动的。crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。用户自己设置的计划任务则使用crontab 命令。

二、Crontab配置

在CentOS系统中,

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

可以看到 创建一个定时任务 需要指定:
cron表达式 指定用户(可省略) 具体执行任务

用基础的 调度器、触发器、执行器来划分:
crontab程序本身是调度器,
在配置文件中配的cron表达式是触发器,
在配置文件中配置的具体执行任务是执行器。

crontab语法

crontab [ -u user ] file

或者

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

注:如果不使用 -u user 的话,就是表示设定自己的时程表。
-e : 执行文字编辑器来设定时程表(最常用)
-r : 删除目前的时程表
-l : 列出目前的时程表

举例:

0 */2 * * * /sbin/service httpd restart  意思是每两个小时重启一次apache 

50 7 * * * /sbin/service sshd start  意思是每天7:50开启ssh服务 

50 22 * * * /sbin/service sshd stop  意思是每天22:50关闭ssh服务 

0 0 1,15 * * fsck /home  每月1号和15号检查/home 磁盘 

1 * * * * /home/bruce/backup  每小时的第一分执行 /home/bruce/backup这个文件 

00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} ;  每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。

30 6 */10 * * ls  意思是每月的1、11、21、31日是的6:30执行一次ls命令

命令:

service crond start    //启动服务
service crond stop    //关闭服务
service crond restart    //重启服务
service crond reload    //重新载入配置

三、特殊事项:

  1. crontab有2种编辑方式:直接编辑/etc/crontab文件与crontab –e,其中/etc/crontab里的计划任务是系统中的计划任务,而用户的计划任务需要通过crontab –e来编辑;
  2. 每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。
  3. crontab中的command尽量使用绝对路径,否则会经常因为路径错误导致任务无法执行。
  4. 新创建的cron job不会马上执行,至少要等2分钟才能执行,可从起cron来立即执行。
  5. %在crontab文件中表示“换行”,因此假如脚本或命令含有%,需要使用%来进行转义。
  6. 脚本无法执行问题

如果我们使用 crontab 来定时执行脚本,无法执行,但是如果直接通过命令(如:./test.sh)又可 以正常执行,这主要是因为无法读取环境变量的原因。
解决方法:
所有命令需要写成绝对路径形式,如: /usr/local/bin/docker。
在 shell 脚本开头使用以下代码:

#!/bin/sh

. /etc/profile
. ~/.bash_profile

3、在 /etc/crontab 中添加环境变量,在可执行命令之前添加命令 . /etc/profile;/bin/sh,使得环境变量生效,例如:

20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh

四、适应场景:

Liunx的定时任务适合进行一些非业务的操作,比如简单的检测业务系统是否异常,定时清除一些系统冗余数据,检查系统情况等。在Liunx定时中不建议放特别复杂的逻辑。

Windows系统

一、简介

Windows定时任务在实际项目中运用的比较少,但是在部分用户环境,会有Windows Server的服务器。所以做一下简单的介绍。主要可以参考一下Windows产品创建定时任务的流程。

二 Windows定时任务概览

在搜索中查找 “任务”,或者在运行中输入compmgmt.msc 可以掉出“任务计划程序”选项;

picture.image

在任务计划程序的首页 我们可以看到任务的概述、运行状态、活动任务和操作栏;

picture.image

在任务计划程序中我们可以看到任务计划程序库;这之中有我们所有的任务,大家可以看一看有没有什么后台跑的自己并不知情的任务。
Window做的比较好的一点是,触发器的描述很准确易懂。

picture.image

三、创建定时任务

第一步:创建一个调度器;

picture.image

第二部,创建一个触发器;

picture.image

picture.image

第三步,选定执行器;

picture.image

picture.image

这样就创建完成了;

第四步,任务在创建完成的编辑中可以添加更多的选项;

比如运行的用户

picture.image

更丰富的触发器配置

picture.image

任务的可用性的一些设置

picture.image

四、定时运行Java程序

运行Java程序需要编写bat脚本,举例:

D:    
cd  code\
java -jar  app.jar
exit

在配置执行器的时候配置脚本即可

picture.image

五、总结

总体来说Windows定时任务,使用场景并不是很多,但是上手操作简单,考虑的异常场景详细,对于很多在定时中可能发生的问题都有配置和规避方案。而且页面配置简单,如果想写一个定时任务的项目可以参考Windows的交互和异常处理。

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论