免费注册 查看新帖 |

Chinaunix

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

求教crontab 时间问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-13 19:11 |只看该作者 |倒序浏览
# crontab -l

0 8-10 * * * /root/touch.sh `date -d "1days ago" +%Y/%m/%d`

0 21-23 * * * /root/touch.sh `date +%Y/%m/%d


请教上面两句话是什么意思?前面的到时间运行touch.sh脚本,这明白.但后面时间是什么意思?

在计划任务中没有执行,当事人说直接运行时可以的..但不明白这两条语句具体是什么意思?
望高人指点...多谢le

报错:
Subject: Cron <root@ip> /root/touch.sh `date +
Content-Type: text/plain; charset=ANSI_X3.4-1968
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Date: Mon, 13 Feb 2012 10:00:01 +0900 (JST)
Status: RO

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file

论坛徽章:
0
2 [报告]
发表于 2012-02-13 19:20 |只看该作者
0 8-10 * * * /root/touch.sh `date -d "1days ago" +%Y/%m/%d`
每天8、9、10点整运行脚本:/root/touch.sh 上日日期作为参数

0 21-23 * * * /root/touch.sh `date +%Y/%m/%d
每天21、22、23点整运行脚本:/root/touch.sh 当日日期作为参数

是这样吧

论坛徽章:
0
3 [报告]
发表于 2012-02-13 19:26 |只看该作者
什么意思?再具体些说明

# more touch.sh
#!/bin/sh
touch 1.txt


1). /root/touch.sh 上日日期作为参数 :    运行这脚本的时间是一天前的时间,那么运行的结果时间也是前一天的?
2). 为啥脚本没有执行呢

论坛徽章:
0
4 [报告]
发表于 2012-02-13 19:47 |只看该作者
呵呵,做练习的吧,crontab里设置的后面的`date ...对这个脚本没什么用吧

其实你这个touch.sh就是更新了一下1.txt文件的时间戳,如果该文件不存在就创建一个1.txt文件。

touch.sh里的touch 1.txt改成touch /root/1.txt试试看

service crond start启动一下服务进程

论坛徽章:
0
5 [报告]
发表于 2012-02-13 19:54 |只看该作者
这是实际服务器中运行的脚本.....只不过把sh内容改了改....
crontab里面全加了date -d ......

现在老报错....计划任务不成功...我是在不明白...这date是干什么用的...起什么效果?

您看看上面的报错信息...怎么让它正常执行呢?
谢谢啦...


看以前的贴说加  "\%Y"...啥的..也没有效果

论坛徽章:
0
6 [报告]
发表于 2012-02-13 20:02 |只看该作者
如果service crond status看到服务已经在运行了,那你得检查你的脚本了

这就是把获取到的日期字符串作为/root/touch.sh脚本的运行参数,你可以看看脚本用这个参数来做了什么具体的操作。

[root@RHEL6A tmp]# echo `date -d "1days ago" +%Y/%m/%d`
2012/02/12
[root@RHEL6A tmp]# echo `date +%Y/%m/%d`
2012/02/13

论坛徽章:
0
7 [报告]
发表于 2012-02-13 20:07 |只看该作者
[root@RHEL6A tmp]# echo `date -d "1days ago" +%Y/%m/%d`
2012/02/12   :  就是说脚本运行2012/02/12的时间为准

[root@RHEL6A tmp]# echo `date +%Y/%m/%d`
2012/02/13   : 就是说脚本运行当天时间的


整个计划任务是这意思?

论坛徽章:
17
CU大牛徽章
日期:2013-03-13 15:32:35午马
日期:2014-07-29 13:09:18未羊
日期:2014-09-19 16:21:07巳蛇
日期:2014-09-29 16:17:06巳蛇
日期:2014-10-16 08:33:00白羊座
日期:2014-10-16 09:10:24申猴
日期:2015-01-09 11:36:332015年亚洲杯之澳大利亚
日期:2015-03-03 13:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之沙特阿拉伯
日期:2015-03-27 11:24:282015亚冠之阿尔纳斯尔
日期:2015-06-16 11:50:23CU大牛徽章
日期:2013-03-13 15:38:15
8 [报告]
发表于 2012-02-14 09:25 |只看该作者
弱弱的问下,你的touch.sh文件赋予了可执行权限没?
另外,1楼的报错信息很明显是你的斜单引号没有匹配,只有一个。

论坛徽章:
0
9 [报告]
发表于 2012-02-14 10:21 |只看该作者
dazha 发表于 2012-02-13 20:07
[root@RHEL6A tmp]# echo `date -d "1days ago" +%Y/%m/%d`
2012/02/12   :  就是说脚本运行2012 ...


是指把这个字符串作为参数传给脚本运行,在脚本中一般应该是用$1这样的变量来使用传入的第一个参数,你看看脚本。

或者可能像楼上说的,你的crontab设置里少了个封闭倒引号?

或者可能是你的脚本里没有用绝对路径,有些地方需要使用绝对路径来执行程序。或者需要使用绝对路径运行的程序export某个变量就行了,那你就加上这句export语句,这都是看具体脚本而定的。

论坛徽章:
0
10 [报告]
发表于 2012-02-14 18:31 |只看该作者
0 21-23 * * * /root/touch.sh `date +%Y/%m/%d`  是有点的...


现在还没搞定,现在在脚本中加上了 "auto",比如:

0 21-23 * * * /root/touch.sh auto

好像还是没有搞定..奇了怪了...

这脚本是参照后面的"date"时间来的定妈?
比如:
date -d "1days ago" +%Y/%m/%d`  就就参照时间运行前一天脚本
date +%Y/%m/%d`  就就参照时间运行当天脚本

由于服务器上不敢动,看不见实际的效果..在这再问问高人啦?

多谢多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP