【发布时间】:2020-12-19 14:18:43
【问题描述】:
我想安排我的 Perl 代码在每天的特定时间运行。所以我把下面的代码放在 bash 文件中:
Automate.sh
#!/bin/sh
perl /tmp/Taps/perl.pl
时间表已在以下路径中指定:
10 17 * * * sh /tmp/Taps/Automate.sh > /tmp/Taps/result.log
当时间到达 17:10 时,.sh 文件尚未运行。但是,当我(手动)运行 ./Automate.sh 时,它正在运行并且我看到了结果。不知道是什么问题。
Perl 代码
#!/usr/bin/perl -w
use strict;
use warnings;
use Data::Dumper;
use XML::Dumper;
use TAP3::Tap3edit;
$Data::Dumper::Indent=1;
$Data::Dumper::Useqq=1;
my $dump = new XML::Dumper;
use File::Basename;
my $perl='';
my $xml='';
my $tap3 = TAP3::Tap3edit->new();
foreach my $file(glob '/tmp/Taps/X*')
{
$files= basename($file);
$tap3->decode($files) || die $tap3->error;
}
my $filename=$files.".xml\n";
$perl = $tap3->structure;
$dump->pl2xml($perl, $filename);
print "Done \n";
错误:
No such file or directory for file X94 at /tmp/Taps/perl.pl line 22.
X94.xml
【问题讨论】:
-
我做到了,但它没有运行,我有一个空的日志文件
-
@Saher : cron 应该通过邮件向您发送标准错误。因此,您应该会收到一些错误消息。或者,您可以执行
2>&1并在您的result.log中收集标准错误。我也会使用-x和sh。然后,日志文件至少不能为空了。我会指定sh和perl的完整路径。 -
创建 crontab 作业,在其中放置命令
env > /tmp/env_data,一旦运行 cronjob,您将看到在 crontab 中设置的所有变量。man crontab提供了足够的信息来理解运行程序所需的设置。 -
你为什么使用basename?考虑一下如果你的密码是 / 会发生什么
-
$files未在您显示的代码中的任何位置声明。使用use strict,此代码将产生致命错误Global symbol "$files" requires explicit package。