首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VSQL正在使用perl脚本生成输出文件,但不是在cronjob中

VSQL正在使用perl脚本生成输出文件,但不是在cronjob中
EN

Stack Overflow用户
提问于 2021-10-05 08:18:38
回答 1查看 78关注 0票数 0

我已经创建了perl脚本,我将在其中连接到vsql并运行查询。当我手动运行脚本时,它会按预期创建输出文件。但是,当我在crontab中设置此脚本时,不会生成输出文件。下面给出了perl脚本

代码语言:javascript
复制
#!/usr/bin/perl
$timenow = `date "+%H_%M"`;
chomp($timenow);
$cmd = "/opt/vertica/bin/vsql -d xxxx-U xxxxx -w xxxxx -F \$'--FSEP--' -At -o dumpfile_" . $timenow . ".txt -c \"SELECT CURRENT_TIMESTAMP(1) AS time;\"";
print "$cmd\n";
system($cmd);

下面是contab条目

代码语言:javascript
复制
*/2 * * * * /usr/bin/perl /tmp/test.pl

有谁能帮帮我做错了什么吗?

EN

回答 1

Stack Overflow用户

发布于 2021-10-05 09:54:03

您的输出将写入一个名为dumpfile_[timestamp].txt的文件。但是那个文件在哪里呢?

您的命令不包含该文件的目录路径。因此,它将被写入当前目录。cronjob的当前目录是拥有该cronjob的用户的主目录。你试过看那里吗?

更具体地说明您希望将文件写入到哪个目录总是更好。有两种方法可以做到这一点:

  1. 在运行命令之前切换到目录

*/2 * * * * cd /some_directory_path && /usr/bin/perl /tmp/test.pl

  • Include你的Perl程序中的完整路径

-o /some_directory_path/dumpfile_" . $timenow . ".txt

更新:好的,拍两张。

谁拥有这个cronjob?cronjob的任何输出都将通过电子邮件发送给所有者。而且肯定会有输出,因为你有一条print()语句。任何错误都将包含在同一电子邮件中。你收到那封邮件了吗?里面有什么?

如果您没有收到电子邮件,您可以通过在crontab中添加一个MAILTO参数来更改发送电子邮件的地址。它看起来像这样:

代码语言:javascript
复制
MAILTO=someone@example.com
*/2 * * * * /usr/bin/perl /tmp/test.pl

请记住,服务器可能未设置为发送外部电子邮件,因此您可能需要使用服务器上的本地mail程序。

如果不能处理电子邮件,可以在/var/log/syslog中查找cron错误(或者,在systemd系统上,尝试使用journalctl _COMM=cron)。

print()的输出将被输出到某个地方。你需要追踪它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69447011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档