sql - VSQL 正在使用 perl 脚本而不是在 cronjob 中生成输出文件
问题描述
我已经创建了连接到 vsql 并运行查询的 perl 脚本。当我手动运行脚本时,它会按预期创建输出文件。但是当我在 crontab 中设置此脚本时,不会生成输出文件。perl 脚本如下
#!/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条目
*/2 * * * * /usr/bin/perl /tmp/test.pl
有人可以帮我做错吗?
解决方案
您的输出被写入一个名为dumpfile_[timestamp].txt
. 但是那个文件在哪里?
您的命令不包含该文件的目录路径。所以它将被写入当前目录。cronjob 的当前目录是拥有 cronjob 的用户的主目录。你试过在那里看吗?
最好更具体地确定要将文件写入哪个目录。两种方法是:
- 在运行命令之前切换到目录
*/2 * * * * cd /some_directory_path && /usr/bin/perl /tmp/test.pl
- 在 Perl 程序中包含完整路径
-o /some_directory_path/dumpfile_" . $timenow . ".txt
更新:好的,拿两个。
谁拥有这个 cronjob?cronjob 的任何输出都将通过电子邮件发送给所有者。当你有一个print()
声明时,肯定会有输出。任何错误都将包含在同一封电子邮件中。你收到那封电子邮件了吗?这里面是什么?
如果您没有收到电子邮件,您可以通过向MAILTO
crontab 添加参数来更改电子邮件发送到的地址。它看起来像这样:
MAILTO=someone@example.com
*/2 * * * * /usr/bin/perl /tmp/test.pl
请记住,服务器可能未设置为发送外部电子邮件,因此您可能需要使用mail
服务器上的本地程序。
如果您无法让电子邮件正常工作,您可以在/var/log/syslog
(或者,在systemd
系统上,尝试journalctl _COMM=cron
)中查找 cron 错误。
print()
输出正在某处。你需要追踪它。
推荐阅读
- android - Nativescript 插件,包括 Android SDK 而不是 aar
- excel - 为什么代码没有点击按钮?
- c# - 将 DeflateStream 文件内容发送到 Azure 消息队列
- matlab - 如何从另一个函数定义变量?
- reactjs - this.SetState 在多次调用中未定义
- python-3.x - 如何修复 docker 上与 pygame 相关的“pygame.error:没有可用的视频设备”错误?
- css - 如何防止实时调整图像大小(在页面加载期间)
- postman - 如何重命名使用 npm 包 newman-reporter-csv 生成的 newman csv 报告
- c - 优化 32 位值构造
- javascript - Android根符号调整大小