我目前使用此函数来包装执行命令并记录它们的执行,并返回代码,并在非零返回代码的情况下退出.
然而,这是有问题的,因为它显然是双插值,使得带有单引号或双引号的命令会破坏脚本.
你能推荐一个更好的方法吗?
这是功能:
do_cmd()
{
eval $*
if [[ $? -eq 0 ]]
then
echo "Successfully ran [ $1 ]"
else
echo "Error: Command [ $1 ] returned $?"
exit $?
fi
}
Run Code Online (Sandbox Code Playgroud) 你认为在bash或Perl脚本中更改目录是可以接受的吗?或者应该不惜一切代价避免这样做?
这个问题的最佳做法是什么?
据我所知,CP4中的Log4Perl或其任何相关模块都不支持日志文件的旋转和压缩.
旋转可以通过使用:
但这两个模块都不支持旋转和压缩.(Log :: Dispatch :: FileRotate在它的待办事项列表中有它,但它目前没有实现).
可以使用Linux中的标准Logrotate工具,使用Log :: Log4perl :: Appender :: File的recreate_check_interval或recreate_check_signal来完成此操作.
从最初的测试中,它看起来像使用日志轮播与delaycompress选项就可以了-即使在高负荷的机器上,因为一旦文件被移动,log4perl将继续记录到同一个文件句柄,直到该信号毫无遗漏.
但是,如果未使用delaycompress,并且压缩日志文件与通过Perl程序捕获信号之间存在(甚至稍有延迟),则某些日志记录数据可能会丢失.
你怎么看?还有其他我们没有想到的选择吗?
假设我有一个开源Web服务器或代理我可以增强,让我们说apache或squid.
有没有办法确定每个客户在网页上花费的时间?
HTTP当然是无状态的,所以它不是微不足道的,但也许有人知道如何处理这个问题?
我有这个Perl脚本,有很多已定义的配置文件常量.例如:
use constant {
LOG_DIR => "/var/log/",
LOG_FILENAME => "/var/log/file1.log",
LOG4PERL_CONF_FILE => "/etc/app1/log4perl.conf",
CONF_FILE1 => "/etc/app1/config1.xml",
CONF_FILE2 => "/etc/app1/config2.xml",
CONF_FILE3 => "/etc/app1/config3.xml",
CONF_FILE4 => "/etc/app1/config4.xml",
CONF_FILE5 => "/etc/app1/config5.xml",
};
Run Code Online (Sandbox Code Playgroud)
我想减少"/ etc/app1"和"/ var/log"的重复,但使用变量不起作用.使用先前定义的常量也不能在相同的"使用常量块"中工作.例如:
use constant {
LOG_DIR => "/var/log/",
FILE_FILENAME => LOG_DIR . "file1.log"
};
Run Code Online (Sandbox Code Playgroud)
不起作用.
使用单独的"使用常量"块可以解决此问题,但这会增加许多不需要的代码.
这样做的正确方法是什么?
谢谢.
在开发web2py应用程序时,它很常见,有各种语法错误,数据库问题等.
但是,在调试这些问题时(在非生产系统中),默认情况下会显示故障单链接,而不是实际故障单.
有没有办法自动重定向到实际票证,无需单击(并等待实际票证加载)?
使用log4perl时,我使用的调试日志布局是:
log4perl.appender.D10.layout=PatternLayout
log4perl.appender.D10.layout.ConversionPattern=%d [pid=%P] %p %F{1} (%L) %M %m%n
log4perl.appender.D10.Filter = DebugAndUp
Run Code Online (Sandbox Code Playgroud)
这会生成非常详细的调试日志,例如:
2008/11/26 11:57:28 [pid=25485] DEBUG SomeModule.pm (331) functions::SomeModule::Test Test XXX was successfull
2008/11/26 11:57:29 [pid=25485] ERROR SomeOtherUnrelatedModule.pm (99999) functions::SomeModule::AnotherTest AnotherTest YYY has faled
Run Code Online (Sandbox Code Playgroud)
这很好用,并提供出色的调试数据.
但是,调试日志的每一行都包含不同的函数名称,pid长度等.这使得每个行的布局都不同,并且使得读取调试日志比需要的更加困难.
是否有一种方法在log4perl中格式化行,以便调试元数据(直到实际日志消息的所有内容)在末尾用空格/制表符填充,并使实际消息从同一列文本开始?
我有这种情况,运行一个由分区表中的索引列过滤的查询,执行全表扫描.
显然,这是postgresql中的一个已知问题,这里有详细解释.
除了对每个分区执行查询,然后对所有结果执行UNION之外,还有更优雅的方法吗?
我在代码中有几个地方需要使用TimeZone.我可以使用DateTime :: TimeZone获取时区名称.将时区名称放在常量中是否合理?或者它应该在变量中?