好的,我要把头发拉出来。我有一个perl脚本,它不会在crontab中运行但是我有一个以前编写的perl脚本,每天在同一个盒子上运行得很好。我已经检查了本网站上的所有解决方案以及网络上的其他解决方案,似乎没有任何区别。这是我的cron和我脚本的第一部分
55 13 * * * su oracle; cd /u02/oraclebackup;./move_em_bkup.pl >> /u02/oraclebackup/move_em_backup.log > move_em_bkup.dbg 2>$1
它触及.dbg文件,但没有放任何东西。没有错误或任何我可以使用的东西。
#!/usr/bin/perl
use Strict;
use Archive::Tar;
use Net::SCP qw/ scp /;
use Net::SCP::Expect;
use DateTime;
有人可以帮忙吗?
答案 0 :(得分:2)
您正在运行的命令是:
su oracle; cd /u02/oraclebackup; ...
su oracle
通常会在oracle
帐户下启动一个交互式shell(假设您有权这样做)。我不确定在非交互式cron
环境中会做什么,但即使假设它有效,{/ 1}}及以下子命令也会在后执行 shell终止,即在拥有crontab的帐户下终止。 cd /u02/oraclebackup
将阻止命令的其余部分或不执行任何操作。
您可以使用su oracle
以指定用户身份运行命令。在你的情况下,你需要像:
su -c command
如果您需要su -c oracle sh -c 'cd /u02/oraclebackup; ...'
帐户的登录环境,请将su
更改为su -
。
更好的是,删除oracle
并将整个内容放在su
帐户的crontab中。你可能仍然需要更多的技巧来改善环境;默认情况下,cron作业使用一组有限的环境变量运行。