免费注册 查看新帖 |

Chinaunix

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

perl程序在crontab里执行出错 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-15 15:56 |只看该作者 |倒序浏览
编写了一个perl expect程序,手工执行成功,但放到solaris 的crontab 里自动执行时,就报错:

WARNING: terminal is not fully functional---(CLI More Help)---  (press RETURN)
Display this help:                                               h or H
Move down half display:                                        d, or ^D
Move down one line:                             Enter, e, ^E,  j or  ^N
Move down one page:                                  Space, f, ^F or ^V
Move to bottom of output:                                G, >, or ESC->
Move to top of output:                                   g,  < or ESC-<
Move up half display:                                           u or ^U
Move up one line:                                    y, ^Y, k, ^K or ^P
Move up one page:                                       b, ^B, or ESC-v
Quit automore:                                              q, Q, or ZZ
Redraw display:                                             ^L, r or ^R

程序里的环境参数设置如下:
#!/usr/local/bin/perl -w
require ("/usr/local/lib/perl5/site_perl/5.8.5/Expect.pm");
my $exp = new Expect;
sleep(1);
$exp->raw_pty(0);               
#$exp->stty();
$exp->exp_internal(1);
$exp->debug(3);
$exp->log_stdout(0);
$exp->restart_timeout_upon_receive(1);
改了其中几个地方,把0改成1,还是不行,怎么回事啊?

论坛徽章:
0
2 [报告]
发表于 2011-03-16 04:59 |只看该作者
一般情况下,手工成功,crontab出错。都是因为环境变量不同而导致的。
例如:起始目录,文件权限等。

我觉得你的问题最可能是因为crontab是没有终端tty。
这个问题。。。 貌似无解,需要终端的程序是不应该放在crontab里面的。
crontab是自动执行,没有人在终端输入东西的。

论坛徽章:
0
3 [报告]
发表于 2011-03-20 09:55 |只看该作者
我在用户的主目录下.cshrc里添加
set LD_LIBRARY_PATH=/usr/local/lib
umask 022
set path=(/usr/local/bin /usr/sbin /bin /usr/bin /usr/ucb /usr/ccs/bin /etc .)
if ( $?prompt ) then
        set history=32
endif
setenv EDITOR vi
setenv TERM vt100

然后重启sun服务器,用户登陆后,查看env
显示已经将TERM设置成功,但是依旧报同样的错误信息:
WARNING: terminal is not fully functional
---(CLI More Help)---  (press RETURN)

论坛徽章:
0
4 [报告]
发表于 2011-03-20 21:18 |只看该作者
前段时间我也遇到这个问题,发现tar不能正确备份数据。
查了一下,是因为crontab是没有终端tty。在需要放在cron里执行的sh文件中的命令行最后加上 >/dev/null 2>&1

改为:
tar -zcvf  /tmp/bak.tar /var/www/perl/* >/dev/null 2>&1

就解决了。




那么“>/dev/null 2>&1”是什么意思呢?

Google上查到是这么说的:

> /dev/null   将输出重定向到/dev/null,这是个空设备,也就是忽略其输出。     
2>&1 是将错误输出到标准输出,如果在控制台调试,也就是屏幕上,方便调试。

论坛徽章:
0
5 [报告]
发表于 2011-03-21 14:24 |只看该作者
没有输出tty,不会影响crontab。
默认会将输出以 email发送给root

但是如果程序需要tty来输入数据,会就有问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP