免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: bikkuri
打印 上一主题 下一主题

[系统管理] 诡异的程序段-在crontab里执行异常 [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
11 [报告]
发表于 2014-04-22 14:55 |只看该作者
可以在这个程序段的后面加echo "host=$host" >> host.log来看host的值。
如果手工执行这个程序,可以看到host=user@host1.net:/home/user,
而如果在crontab中执行这个程序,则会看到host=。
也就是说host还是空值。

blackold 发表于 2014-04-22 13:21
是如何执行的?执行后,你如何查看 host  的值?

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
12 [报告]
发表于 2014-04-22 15:13 |只看该作者
bikkuri 发表于 2014-04-22 14:51
哦 我没看到你把ls -l也改成了ls -s那结果应该是一样的吧?
直接执行应该没问题,但是不知道为什么在cront ...


我觉得问题在于ls -l后awk取得字段有问题,用ls -s简单化输出,避免输错列的问题。

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
13 [报告]
发表于 2014-04-22 15:56 |只看该作者
本帖最后由 bikkuri 于 2014-04-22 16:08 编辑

我觉得不是输错列的问题,总共也没几列,我不会数错的。。。
何况直接执行的结果也是正确的,问题是放在crontab里执行的结果异常。。。
我在程序段的后面加了一条echo "host=$host" >> host.txt来检查host值
先是crontab执行了一次,后是手工执行了一次,可以看到结果:
  1. root@dbox:~# cat host.txt
  2. host=
  3. host=user@host2.net:/home/user
复制代码
我又做了另外一个测试,在程序段中加了以下一条命令:
  1. echo $(ssh -i $ky ${host1%%:*} "date > .$(hostname) 2>/dev/null;ls -l .$(hostname);rm -f .$(hostname)") > /root/test
复制代码
分别用手工执行和用crontab执行一次,发现:
手工执行可以在/root/test文件中看到文件列表信息,/root/test的文件长度为50
crontab执行后/root/test文件是空的,文件长度为1(只有一个0a字符)。
所以我觉得可能是这条ssh命令中含有什么特殊字符犯了crontab的忌讳或者被转义了,导致执行失败。


damcool 发表于 2014-04-22 15:13
我觉得问题在于ls -l后awk取得字段有问题,用ls -s简单化输出,避免输错列的问题。

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
14 [报告]
发表于 2014-04-22 16:20 |只看该作者
bikkuri 发表于 2014-04-22 15:56
我觉得不是输错列的问题,总共也没几列,我不会数错的。。。
何况直接执行的结果也是正确的,问题是放在cr ...


列数越多出错概率越高,一共两列再出错,就是RP问题了

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
15 [报告]
发表于 2014-04-22 16:57 |只看该作者
注, cron 默认为 sh。

论坛徽章:
0
16 [报告]
发表于 2014-04-22 17:19 |只看该作者
希望大家踊跃的回答此大神的问题,楼主可真是位高人啊!!
我得到了他的很大很多帮助!在此感谢!

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
17 [报告]
发表于 2014-04-22 18:59 |只看该作者
这个不是问题。我的脚本本身用的就是/bin/sh。
何况脚本的第一行有#!/bin/sh指定使用sh。


blackold 发表于 2014-04-22 16:57
注, cron 默认为 sh。

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
18 [报告]
发表于 2014-04-22 19:04 |只看该作者
不是awk的问题。
而是awk前一条ssh远程执行命令的输出在crontab方式执行时为空。
我开始以为是因为使用了hostname函数在远程服务器无法执行,
但是去掉函数,改用固定变量后那条ssh的输出仍然是空。
不知道是怎么回事。手动执行的话一切又都是正常的。


damcool 发表于 2014-04-22 16:20
列数越多出错概率越高,一共两列再出错,就是RP问题了

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
19 [报告]
发表于 2014-04-22 19:06 |只看该作者
谢谢您的支持!

cfzxwxb 发表于 2014-04-22 17:19
希望大家踊跃的回答此大神的问题,楼主可真是位高人啊!!
我得到了他的很大很多帮助!在此感谢!

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
20 [报告]
发表于 2014-04-22 20:11 |只看该作者
逐步调试吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP