linux定时任务实时监测,定时任务及应用

## 定时任务

>[success]linux中使用crontab命令来实现定时任务的

crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。

cron 系统调度进程。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。

crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。系统管理员可以通过cron.deny 和 cron.allow 这两个文件来禁止或允许用户拥有自己的crontab文件。

### 特点

#### 1. crontab文件一般位于/etc/下,这里面存放系统运行的的调度程序。

#### 2. 每个用户都会生成一个自动生成一个自己的crontab文件,一般位于/var/spool/cron目录下

#### 3. cron.deny 与 cron.allow文件

>[success]/etc/cron.deny 表示不能使用crontab 命令的用户

/etc/cron.allow 表示能使用crontab的用户。

默认情况下,cron.allow文件不存在。如果两个文件同时存在,那么/etc/cron.allow 优先。如果两个文件都不存在,那么只有超级用户可以安排作业。

### crontab的用法

#### 1. 查看当前用户的定时任务

~~~

shell>crontab -l

#显示结果

* * * * * /home/oracle/test.sh >/dev/null 2>&1

~~~

#### 2.编辑当前用户的定时任务

>[success]可以在编辑状态修改、删除、新增一些定时任务。注释一般用#

~~~

shell>crontab -e

~~~

#### 3.删除当前用户的定时任务

~~~

shell>crontab -r

~~~

### 定时任务的格式

定时任务的格式如下:

~~~

# 23 23 * * * /home/oracle/scripts/alert_log_archive.sh >/dev/null 2>&1

* * * * * 命令或脚本

~~~

#### 一条定时任务有 6 列组成,每列的含义如下:

crontab 文件中每个条目中各个域的意义和格式:

第一列 分钟: 1——59

第二列 小时: 1——23(0表示子夜)

第三列 日 : 1——31

第四列 月 : 1——12

第五列 星期: 星期0——6(0表示星期天,1表示星期一、以此类推)

第六列 要运行的命令

### 扩展

>[success]在这里先介绍一个命令watch,以周期性的方式执行给定的指令,指令输出以全屏方式显示。watch可以帮你监测一个命令的运行结果。

#### 命令格式:

~~~

watch(选项)(参数)

~~~

#### 选项:

~~~

-n:指定指令执行的间隔时间(秒)默认2秒;

-d:高亮显示指令输出信息不同之处;

-t:不显示标题。

~~~

#### 参数:

~~~

指令:需要周期性执行的指令。

~~~

#### watch实例

~~~

#watch uptime

#watch -t uptime

#watch -d -n 1 netstat -ntlp

#watch -d 'ls -l | fgrep goface' //监测goface的文件

#watch -t -differences=cumulative uptime

#watch -n 60 from //监控mail

#watch -n 1 "df -i;df" //监测磁盘inode和block数目变化情况

#watch cat /tmp/1.txt //监测1.txt的内容

~~~

#### 实列

~~~

5 * * * * ls # 指定每小时的第5分钟执行一次ls命令

30 5 * * * ls #指定每天的 5:30 执行ls命令

30 7 8 * * ls # 指定每月8号的7:30分执行ls命令

30 5 8 6 * ls #指定每年的6月8日5:30执行ls命令

30 6 * * 0 ls #指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1, 以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]

30 3 10,20 * * ls #每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]

25 8-11 * * * ls # 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]

*/15 * * * * ls # 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]

30 6 */10 * * ls # 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]

#每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件

50 7 * * * root run-parts /etc/cron.daily # [ 注:run-parts参数表示,执行后面目录中的所有可执行文件。 ]

~~~

#### 定时的应用

>前面咱们写了服务器健康状态脚本、磁盘报警脚本、数据库备份脚本。

接下来,就配合定时任务来实现系统监测和数据库的定时备份。

#### 在这里事先把需要加入定时任务的脚本,放到/mybash 目录中

#### 添加如下定时任务

1. 每天上午9点,执行服务器健康态脚本

2. 每周5凌晨3点执行数据库备份脚本

3. 每30分种执行一次磁盘报警脚本

~~~

shell>crontab -e

# 每天上午9点,执行服务器健康态脚本

0 9 * * * /mybash/status.sh

# 每周5凌晨3点执行数据库备份脚本

0 3 * * 5 /mybash/mysql.sh

# 每30分种执行一次磁盘报警脚本

*/30 * * * 0 /mybash/bj.sh

~~~

### 遇到的问题

1. 脚本通过命令可以执行,但是加入定时任务后,无法正常运行

>[info]这个是因为环境变量的问题,因为在定时任务中环境变量没有生效。通常情况下是因为iptables和ifconfig等命令造成的。

### 解决办法:

#### 方法1:

>[success]直接在脚本中加入命令的全路径,如果不清楚命令的路径可以通过whereis命令查看

~~~

whereis iptables

iptables: /sbin/iptables /usr/share/man/man8/iptables.8.gz

~~~

#### 方法2:在脚本中,设置环境变量

>[success]你可以通过脚本设置,也可以通过引入环境变量配置文件的方式。

~~~

#!/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin //在脚本中加入这一句

iptables -A INPUT -p UDP --dport 123 -j ACCEPT

iptables -A OUTPUT -p UDP --sport 123 -j ACCEPT

~~~

或者使用下面的方式引入环境变量

~~~

#!/bin/bash

. /etc/profile # 前面的`点`不能少,其后要有一个空格

iptables -A INPUT -p UDP --dport 123 -j ACCEPT

iptables -A OUTPUT -p UDP --sport 123 -j ACCEPT

~~~

#### 方法3:

>[success]在编写定时任务时,设定环境变量

~~~

crontab -e

# 开始编辑定时任务

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin # 这句是关键

* * * * * /root/mysql.sh

~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值