从cron运行时,Perl脚本不会将STDOUT输出到文件

履历表

对Perl来说还很新。我在Linux机器上有一个Perl脚本,它具有自己的日志文件。日志文件名可以更改,具体取决于脚本所处理的数据(日期,文件名,数据类型等)。

某些情况下,脚本正在使用system()调用来调用本机可执行文件,这会将一些信息提供给STDOUT和STDERR-在几分钟内几十到几百行。可执行文件完成后,脚本将继续并将其他一些信息记录到日志文件中。

到目前为止,该脚本仅记录了自己的输出,而没有本机可执行文件的输出,我想将其与Perl脚本记录的文件记录在同一文件中。使用以下两种方法进行了尝试:

#!/usr/bin/perl
#some other code
@array_executable_and_parameters = qw/echo foo/ ;
open $log_fh, '>>', 'log/logfile1.txt';
*STDOUT = $log_fh;
*STDERR = $log_fh;
print "log_fh=$log_fh\n";
system( @array_executable_and_parameters);

$logfilename='log/logfile2.txt';
open(LOGFILEHANDLE, ">>$logfilename" );
*STDOUT = LOGFILEHANDLE;
*STDERR = LOGFILEHANDLE;
print LOGFILEHANDLE "Somethinglogged\n";
system( @array_executable_and_parameters);

当我手动运行脚本时有效,但从cron运行时则无效。

我知道可以通过Linux方式在crontab中进行重定向,但是随后我必须知道要登录的文件名,只有在某些数据到达时才能知道该文件名,因此在我看来不可行。我还希望脚本中尽可能多的内容,而对Linux等没有太多依赖性。我也没有可能安装任何额外的模块,供Perl使用的库,假设这只是最低限度的安装。

如何从Perl脚本中将STDOUT和STDERR重定向到特定文件?

如果可能,如何检测STDOUT当前使用的文件名?

三元组

重新分配*STDOUT仅影响Perl内部STDOUT标量的绑定。在系统级别重定向标准输出的正确方法是:

open (STDOUT, '>&', $log_fh) or die "$0: could not: $!";

同样,您应该从其他系统调用中报告可能会失败(use strict和等)的错误。

cron在主目录中运行您的作业,因此,如果路径$HOME/log不存在,脚本将无法打开日志文件句柄(静默,因为您没有记录open错误!)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从cron运行时,为什么此脚本没有输出到文本文件?

从Perl运行时,将bash脚本的输出记录到日志文件和stdout中

Powershell 脚本不会将数据输出到 ISE 之外的文件中

当直接从终端运行时,Bash脚本不会为命令打印相同的输出

作为systemd服务运行时,Python脚本不会写入文件

脚本不会将时间写入文件

从Junit运行时,System.out.print不会输出到控制台

从cron或at运行时Shell脚本被截断

Python脚本不会将汉字写入XML文件

MMV不会在bash脚本中执行(仅在由CRON运行时)

在cron的shell脚本中运行时,为什么curl不产生输出?

重定向不会将任何内容输出到文件中

Bash 不会将此处的文档输出到文件

从 BUTTON 或 SCRIPTEDITOR 运行时脚本不同

我有一个运行时间很长的脚本,但希望能够在执行时在stdout输出中滚动

脚本不会运行

cron输出到文件

脚本运行时如何更改bash脚本输出?

作为cron作业运行时,lynx -dump的输出不同

从 cron 运行时 Perl 不执行 shell 命令

当使用crontab自动运行时,为什么此脚本会输出损坏的文件?

从系统命令运行时,Perl脚本无法找到包含文件

从浏览器运行时,php脚本require()语句获取文件,但从Plesk CRON作业运行时,则不获取文件

Bash脚本在doubleclick与在终端中运行时的输出不同

在脚本中运行时,如何使bash输出颜色?

从bash脚本运行时,Perl无法杀死self pid

当以我的管理员用户身份运行时,Powershell脚本不会在任务计划程序中启动

在ISE之外运行时,根本不会显示FolderBrowserDialog

从桌面运行时,Python 3.2脚本不起作用和/或导入tkinter