2017-10-16 68 views
0

我做了一个sh脚本每天晚上更新了我的工作目录:CVS更新

20 20 * * * /home/oracle/scripts/lancia_script.ksh /home/oracle/setORACLE_ENV /home/oracle/scripts/update_cvs.ksh > /home/oracle/logs/crontab/update_cvs.log 2>&1 

文件update_cvs.ksh:

[...] 
cd $CVSDIR 
cvs update 
cd - 
cp -R $CVSDIR/* $SCRIPTSDIR/ 
chmod 744 $SCRIPTSDIR/*.ksh 
[...] 

如果我运行它手动有没有问题,但如果我安排它,我收回:

cvs [update aborted]: cannot exec rsh: No such file or directory 
cvs [update aborted]: end of file from server (consult above messages if any) /u01/home/oracle 

为什么?

+0

您已经针对您的具体问题制定了答案,但值得注意的是,未来cron作业不会与您在交互式shell中时使用的环境变量相同。这通常是大多数“很好,当我手动运行但不通过cron”问题的原因。 –

回答

2

起初我怀疑是从crontab的CVS运行找不到rsh由于在登录shell PATH变量差异和cron环境。

我错了,答案是设置CVS_RSHssh从crontab运行的脚本,原始作者想通了。这是因为CVS实际上是老的,默认为rsh作为远程shell。但是因为rsh不安全,所以CVS存储库的大多数管理员都需要连接到安全shell ssh

幸得:https://bugs.archlinux.org/task/12636#comment42630

+0

/usr/bin /其中:no rsh in(/bin:/usr/bin:/sbin:/usr/sbin:/usr/ucb:/etc:.:/usr/openwin/bin:/usr/local/ bin:/ usr/ccs/bin:/ usr/sfw/bin:/u01/app/oracle/product/11.2.0/dbhome_1/bin:/home/oracle/ scripts) –

+1

当你输入'echo $ CVS_RSH'? – smbear

+0

如果我从crontab运行它CVS_RSH未设置。如果我在控制台CVS_RSH = ssh中运行。 –

1

我写

[...] 
export CVS_RSH=ssh 
cd $CVSDIR 
cvs update 
cd - 
cp -R $CVSDIR/* $SCRIPTSDIR/ 
chmod 744 $SCRIPTSDIR/*.ksh 
[...] 

它的工作原理!