-1

好的,我正要拔头发。我有一个 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;

有人可以帮忙吗?

4

1 回答 1

2

您正在运行的命令是:

su oracle; cd /u02/oraclebackup; ...

su oracle通常在帐户下启动一个交互式外壳oracle(假设您有权这样做)。我不确定在非交互式cron环境中会做什么,但即使假设它有效,在该 shell 终止,即在拥有 crontab 的帐户下,cd /u02/oraclebackup将执行以下子命令。这将阻止命令的其余部分或不执行任何操作。su oracle

您可以使用su -c command以指定用户身份运行命令。在你的情况下,你会想要这样的东西:

su -c oracle sh -c 'cd /u02/oraclebackup; ...'

或者如果您需要该帐户的登录环境,请更改su为。su -oracle

更好的是,删除su并将整个内容放在oracle帐户的 crontab 中。您可能仍然需要玩一些技巧来使环境正确;默认情况下,cron 作业使用一组有限的环境变量运行。

于 2013-07-31T19:53:27.673 回答