Perl 如何打开符号链接
我需要重新编程一些PHP和ISPConfig CP的shell脚本,以便与其他一些技术一起使用 对于日志旋转,它使用名为Perl 如何打开符号链接,perl,logging,apache2,Perl,Logging,Apache2,我需要重新编程一些PHP和ISPConfig CP的shell脚本,以便与其他一些技术一起使用 对于日志旋转,它使用名为vlogger的脚本。我让它运行,但一个打开日志文件的函数给了我错误 没有这样的文件或目录无法在/usr/local/ispconfig/server/scripts/vlogger第447行第2行打开/var/www/website_name/log/20170623-access.log 奇怪的是,它写入文件,但给出了或die()中的错误 $vhost变量通常是网站名称/l
vlogger
的脚本。我让它运行,但一个打开日志文件的函数给了我错误
没有这样的文件或目录无法在/usr/local/ispconfig/server/scripts/vlogger第447行第2行打开/var/www/website_name/log/20170623-access.log
奇怪的是,它写入文件,但给出了或die()中的错误
$vhost
变量通常是网站名称/log/
。在更改之前,website\u name
是一个目录,但现在它是一个符号链接,链接到client/website1/
目录所在的位置
如何重写此函数,使其忽略$vhost
是一个符号链接,或是其他什么可能导致此问题?您正在使用打开调用的文件句柄覆盖$vhost
。这意味着您的打开
将工作一次,您可以写入$vhost
,但下次尝试打开日志文件时,$vhost
不再包含目录路径,并且打开
将失败
您还应该使用三参数形式的open
,如下所示
my $log_file = $vhost . time2str( $TEMPLATE, time() );
open my $log_fh, '>>', $log_file
or die qq{Unable to open "$log_file" for appending: $!};
print $log_fh ...;
您正在使用open
调用中的文件句柄覆盖$vhost
。这意味着您的打开
将工作一次,您可以写入$vhost
,但下次尝试打开日志文件时,$vhost
不再包含目录路径,并且打开
将失败
您还应该使用三参数形式的open
,如下所示
my $log_file = $vhost . time2str( $TEMPLATE, time() );
open my $log_fh, '>>', $log_file
or die qq{Unable to open "$log_file" for appending: $!};
print $log_fh ...;
您应该添加$代码>以显示错误消息。这就是系统返回的错误。它将有助于发现问题。或者以信息性的方式检查open
上的哪个死亡。添加$!给了我同样的错误。“没有这样的文件或目录不能在/usr/local/ispconfig/server/scripts/vlogger第447行第2行打开/var/www/website_name/log/20170623-access.log。”perl-MData::Dumper-e'print Dumper[-d,-w]for pop'/var/www/website_name/log/
I da,${vhost}
nije isto-kao I$LOGDIR
您应该添加$代码>以显示错误消息。这就是系统返回的错误。它将有助于发现问题。或者以信息性的方式检查open
上的哪个死亡。添加$!给了我同样的错误。“没有这样的文件或目录不能在/usr/local/ispconfig/server/scripts/vlogger第447行第2行打开/var/www/website_name/log/20170623-access.log。”perl-MData::Dumper-e'print Dumper[-d,-w]for pop'/var/www/website_name/log/
I da,${vhost}
nije isto-kao I$LOGDIR
这会在日志中出现一个新错误:“全局符号“$log\u文件”要求在/usr/local/ispconfig/server/scripts/vlogger第454行显示包名(您是否忘记声明“my$log\u文件”)。哦,我从来没有用perl编程,也不知道它的语法。@Sam_slo好的,我道歉。这是我在发布代码时发现的一个问题,我认为我已经解决了。我现在已经改正了。我自己也能看到。:)您的代码可能会工作,但我不能使用它,因为整个函数中的其他代码需要$vhost才能工作。使用您的代码,我在下一个命令中得到一个错误,即它找不到文件,因为$vhost中只有“website\u name/log/”而不是使用$TEMPLATE创建的文件名的路径。无论如何谢谢你!这会在日志中出现一个新错误:“全局符号“$log_文件”要求在/usr/local/ispconfig/server/scripts/vlogger第454行显示包名(是否忘记声明“my$log_文件”)。哦,我从来没有用perl编程,也不知道它的语法。@Sam_slo好的,我道歉。这是我在发布代码时发现的一个问题,我认为我已经解决了。我现在已经改正了。我自己也能看到。:)您的代码可能会工作,但我不能使用它,因为整个函数中的其他代码需要$vhost才能工作。使用您的代码,我在下一个命令中得到一个错误,即它找不到文件,因为$vhost中只有“website\u name/log/”而不是使用$TEMPLATE创建的文件名的路径。无论如何谢谢你!