gpt4 book ai didi

sql - Cronjob 不在 perl 脚本中执行命令行

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:28 24 4
gpt4 key购买 nike

我不熟悉linux/linux环境所以如果我有任何错误请原谅我,请发表评论以澄清。

我已经创建了一个简单的 perl 脚本。此脚本创建一个 sql 文件,如图所示,它将执行文件中要插入到数据库中的行。

#!/usr/bin/perl

use strict;
use warnings;
use POSIX 'strftime';

my $SQL_COMMAND;
my $HOST = "i";
my $USERNAME = "need";
my $PASSWORD = "help";
my $NOW_TIMESTAMP = strftime '%Y-%m-%d_%H-%M-%S', localtime;

open my $out_fh, '>>', "$NOW_TIMESTAMP.sql" or die 'Unable to create sql file';

printf {$out_fh} "INSERT INTO BOL_LOCK.test(name) VALUES ('wow');";

sub insert()
{
my $SQL_COMMAND = "mysql -u $USERNAME -p'$PASSWORD' ";

while( my $sql_file = glob '*.sql' )
{
my $status = system ( "$SQL_COMMAND < $sql_file" );
if ( $status == 0 )
{
print "pass";
}
else
{
print "fail";
}
}
}

insert();

如果我在以用户身份登录时执行它(我无权访问管理员),这将起作用。但是,当我设置一个 cronjob 来运行这个文件时,让我们说在上午 10 点 08 分使用以下行(在 crontab -e 中):

08 10 * * * perl /opt/lampp/htdocs/otpms/Data_Tsunami/scripts/test.pl > /dev/null 2>&1

我知道脚本在创建 sql 文件时正在执行。然而,在上午 10 点 8 分之后,没有新行被插入到数据库中。我搜索了解决方案,有些人建议使用 DBI 模块,但它在服务器上不可用。

编辑:最后没能解决。 root/admin 帐户用于执行脚本,以便“解决”问题。

最佳答案

首先,去掉 crontab 条目末尾的 >/dev/null 2>&1(至少暂时)这样你就可以 < em>查看可能发生的任何错误。

换句话说,暂时将其更改为:

08 10 * * * perl /opt/lampp/htdocs/otpms/Data_Tsunami/scripts/test.pl >/tmp/myfile 2>&1

然后您可以检查 /tmp/myfile 文件以查看输出的内容。

可能的情况是 mysql 实际上不在您的 cron 作业的路径上,因为 cron 本身提供了一个相当小的环境。

要解决该问题(假设是这样),请参阅 this answer ,其中提供了一些关于如何最好地扩展 cron 环境以满足您需要的指南。这可能只涉及将 MySQL 可执行目录添加到您的 PATH 变量。

您可能要考虑的另一件事是在尝试将其传递给 mysql 之前关闭 out_fh 文件 - 如果缓冲区没有被刷新,它可能仍然就其他进程而言是一个空文件。

关于sql - Cronjob 不在 perl 脚本中执行命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32085562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com