免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6831 | 回复: 10
打印 上一主题 下一主题

一条shell语句完成定时任务的问题,谢谢! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-06-28 15:49 |只看该作者 |倒序浏览
写一条shell语句,完成功能:在当前系统时间5小时后将目前目录下全部文件列表输出到一个文件File_list中。

请问,谁用一条SHELL语句实现了这个功能?既然是定时任务,是不是必须使用crontab 来完成啊?


我用很多语句 + crontab 完成这个功能,但好象不符合题目要求哦。。
哪位大侠帮忙考虑一下,给个答案啊?谢谢啦!   

论坛徽章:
0
2 [报告]
发表于 2004-06-28 16:01 |只看该作者

一条shell语句完成定时任务的问题,谢谢!

用watch命令。可以把

论坛徽章:
0
3 [报告]
发表于 2004-06-28 16:05 |只看该作者

一条shell语句完成定时任务的问题,谢谢!

at now + 300 minutes
ls > File_list
CTRL-D

论坛徽章:
0
4 [报告]
发表于 2004-06-28 16:24 |只看该作者

一条shell语句完成定时任务的问题,谢谢!

不好意思哦。这个运行起来报错:

warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
这是什么意思啊?找AT的用法,居然没有找到 :(  请告诉我一下,好么?谢谢啦!   


原帖由 "hawkli" 发表:
at now + 300 minutes
ls > File_list
CTRL-D

论坛徽章:
0
5 [报告]
发表于 2004-06-28 16:51 |只看该作者

一条shell语句完成定时任务的问题,谢谢!

atd服务启动了吗?

论坛徽章:
0
6 [报告]
发表于 2004-06-28 16:57 |只看该作者

一条shell语句完成定时任务的问题,谢谢!

试过用sleep吗?应该可以吧!

论坛徽章:
0
7 [报告]
发表于 2004-06-28 17:07 |只看该作者

一条shell语句完成定时任务的问题,谢谢!

;(  ATD 服务已经起来了啊。还是报这个错。。谁再帮我一下?谢谢!

论坛徽章:
0
8 [报告]
发表于 2004-06-28 17:58 |只看该作者

一条shell语句完成定时任务的问题,谢谢!

at命令

用户使用at命令在指定时刻执行指定的命令序列。也就是说,该命令至少需要指定一个命令、一个执行时间才可以正常运行。at命令可以只指定时间,也可以时间和日期一起指定。需要注意的是,指定时间有个系统判别问题。比如说:用户现在指定了一个执行时间:凌晨3:20,而发出at命令的时间是头天晚上的20:00,那么究竟是在哪一天执行该命令呢?如果用户在3:20以前仍然在工作,那么该命令将在这个时候完成;如果用户3:20以前就退出了工作状态,那么该命令将在第二天凌晨才得到执行。下面是at命令的语法格式:

at [-V] [-q 队列] [-f 文件名] [-mldbv] 时间

at -c 作业 [作业...]

at允许使用一套相当复杂的指定时间的方法,实际上是将POSIX.2标准扩展了。它可以接受在当天的hh:mm(小时:分钟)式的时间指定。如果该时间已经过去,那么就放在第二天执行。当然也可以使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。用户还可以采用12小时计时制,即在时间后面加上AM(上午)或者PM(下午)来说明是上午还是下午。

也可以指定命令执行的具体日期,指定格式为month day(月 日)或者mm/dd/yy(月/日/年)或者dd.mm.yy(日.月.年)。指定的日期必须跟在指定时间的后面。

上面介绍的都是绝对计时法,其实还可以使用相对计时法,这对于安排不久就要执行的命令是很有好处的。指定格式为:now + count time-units ,now就是当前时间,time-units是时间单位,这里可以是 minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,究竟是几天,还是几小时,等等。

还有一种计时方法就是直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。下面通过一些例子来说明具体用法。

[例2] 指定在今天下午5:30执行某命令。假设现在时间是中午12:30,1999年2月24日,其命令格式如下:

at 5:30pm

at 17:30

at 17:30 today

at now + 5 hours

at now + 300 minutes

at 17:30 24.2.99

at 17:30 2/24/99

at 17:30 Feb 24

 

以上这些命令表达的意义是完全一样的,所以在安排时间的时候完全可以根据个人喜好和具体情况自由选择。一般采用绝对时间的24小时计时法可以避免由于用户自己的疏忽造成计时错误的情况发生,例如上例可以写成:

at 17:30 2/24/99

这样非常清楚,而且别人也看得懂。

对于at命令来说,需要定时执行的命令是从标准输入或者使用-f选项指定的文件中读取并执行的。如果at命令是从一个使用su命令切换到用户shell中执行的,那么当前用户被认为是执行用户,所有的错误和输出结果都会送给这个用户。但是如果有邮件送出的话,收到邮件的将是原来的用户,也就是登录时shell的所有者。

[例3]

$ at -f work 4pm + 3 days

在三天后下午4点执行文件work中的作业。

$ at -f work 10am Jul 31

在7月31日上午10点执行文件work中的作业。

在任何情况下,超级用户都可以使用这个命令。对于其他用户来说,是否可以使用就取决于两个文件:/etc/at.allow和/etc/at.deny。如果/etc/at.allow文件存在的话,那么只有在其中列出的用户才可以使用at命令;如果该文件不存在,那么将检查/etc/at.deny文件是否存在,在这个文件中列出的用户均不能使用该命令。如果两个文件都不存在,那么只有超级用户可以使用该命令;空的/etc/at.deny文件意味着所有的用户都可以使用该命令,这也是默认状态。

下面对命令中的参数进行说明。

-V 将标准版本号打印到标准错误中。

-q queue 使用指定的队列。队列名称是由单个字母组成,合法的队列名可以由a-z或者A-Z。a队列是at命令的默认队列。

-m 作业结束后发送邮件给执行at命令的用户。

-f file 使用该选项将使命令从指定的file读取,而不是从标准输入读取。

-l atq命令的一个别名。该命令用于查看安排的作业序列,它将列出用户排在队列中的作业,如果是超级用户,则列出队列中的所有工作。

命令的语法格式如下:

atq [-V] [-q 队列] [-v]

-d atrm 命令的一个别名。该命令用于删除指定要执行的命令序列,语法格式如下:

atrm [-V] 作业 [作业...]

-c 将命令行上所列的作业送到标准输出。

[例4] 找出系统中所有以txt为后缀名的文件,并且进行打印。打印结束后给用户foxy发出邮件通知取件。指定时间为十二月二十五日凌晨两点。

首先键入:

$ at 2:00 12/25/99

然后系统出现at>提示符,等待用户输入进一步的信息,也就是需要执行的命令序列:

at> find / -name “*.txt”|lpr

at> echo “foxy:All texts have been printed.You can take them over.Good day!River” |mail -s ”job done” foxy

输入完每一行指令然后回车,所有指令序列输入完毕后,使用<Ctrl+d>组合键结束at命令的输入。这时候屏幕将出现如下信息:

warning:command will be executed using /bin/sh.

job 1 at 1999-12-25 02:00

提醒用户将使用哪个shell来执行该命令序列。

实际上如果命令序列较长或者经常被执行的时候,一般都采用将该序列写到一个文件中,然后将文件作为at命令的输入来处理。这样不容易出错。

 

[例5] 上面的例子可以修改如下:

将命令序列写入到文件/tmp/printjob,语句为:

$ at -f /tmp/printjob 2:00 12/25/99

这样一来,at命令将使用文件中的命令序列,屏幕显示如下:

Warning:command will be executed using /bin/sh.

job 2 at 1999-12-25 02:00

当然也可以采用以下命令:

$ at< /tmp/printjob 2:00 12/25/99

来完成同样的任务。也就是使用输入重定向的办法将文件定向为命令输入。

论坛徽章:
0
9 [报告]
发表于 2004-06-28 18:40 |只看该作者

一条shell语句完成定时任务的问题,谢谢!

你当前用户可以用at命令么?
如果可以,你的warning后面是不是还写了个时间?如果是的话那就对了。
这个程序将在5个小时后运行,你就等着看结果吧。
at手册看bjgirl贴出来的,很详细了。
说明一点at只能用一次的。你的题目没有说要多次运行,所以我用at啦。

论坛徽章:
0
10 [报告]
发表于 2004-06-28 20:58 |只看该作者

一条shell语句完成定时任务的问题,谢谢!

非常感谢楼上所有朋友的热心帮助。。这里真温暖 :)
好,我去好好看看这些资料,再次感谢你们啦!!

祝你们快乐!如意!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP