您的位置:首页 > 运维架构 > Linux

Linux下利用Crond和Expect定时登陆交换机执行任务

2013-03-13 09:24 302 查看
1、Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。expect等待输出中输出特定的字符,通常是一个提示符,然后发送特定的响应。

例:在/root下建立test.exp,执行命令:expect /root/test.exp

#!/usr/bin/expect -f

#这一行告诉操作系统脚本里的代码使用那一个shell来执行。这里的expect其实和linux下的#bash、windows下的cmd是一类东西。

#注意:这一行需要在脚本的第一行。

set timeout 10

#设置默认超时时间(秒),如果在给定的时间内没有输入,则会超时并返回一个默认的响应。

#file name: test.exp

#Usages: shutdown ports

#Version: v1.1

#By Create mark

#Date: 2013-3-6

spawn telnet 172.21.1.1

#spawn是进入expect环境后才可以执行的expect内部命令,如果没有装expect或者直接在默认的SHELL下执行是找不到spawn命令的。它主要的功能是给ssh运行进程加个壳,用来传递交互指令。

expect "login:"

#这里的expect也是expect的一个内部命令,expect的shell命令和内部命令是一样的,但不是一个功能。判断上次输出结果里是否包含“login:”的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的10秒

send "用户名\r"

#执行交互动作,与手工输入密码的动作等效。

expect "password"

send "密码\r"

#sleep 1000

send "enable ports 1:6\r"

send "exit\r"

send "y\r"

expect eof

exit

2、Crond

crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。而linux任务调度的工作主要分为以下两类:

1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存

2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

/etc/cron.deny

该文件中所列的用户不允许使用Crontab命令

/etc/cron.allow

该文件中所列的用户允许使用Crontab命令

/var/spool/cron/

是所有用户的crontab文件

/var/spool/cron/crontabs

/var/spool/cron/crontabs

Crontab命令的格式为:crontab –l|-r|-e|-i [username],其参数含义如表一:

-l 显示用户的Crontab文件的内容

-ri 删除用户的Crontab文件前给提示

-r 从Crontab目录中删除用户的Crontab文件

-e 编辑用户的Crontab文件

用户所建立的Crontab文件存于/var/spool/cron中,其文件名与用户名一致。

它的格式共分为六段,前五段为时间设定段,第六段为所要执行的命令段,

格式如下:* * * * *

第一段 代表分钟 0—59

第二段 代表小时 0—23

第三段 代表日期 1—31

第四段 代表月份 1—12

第五段 代表星期几,0代表星期日 0—6

名称 : crontab

使用权限 : 所有使用者

使用方式 :

crontab [ -u user ] file

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

说明 :

crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

餐数 :

-e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)

-r : 删除目前的时程表

-l : 列出目前的时程表

时程表的格式如下 :

f1 f2 f3 f4 f5 program

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。

当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推

当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推

当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推

当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推

使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。

例子 :

每月每天每小时的第 0 分钟执行一次 /bin/ls :

0 7 * * * /bin/ls

在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup :

0 6-12/3 * 12 * /usr/bin/backup
本文出自 “遗忘一族” 博客,请务必保留此出处http://markzwl.blog.51cto.com/408276/1152890
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: