我不熟悉linux/linux環境,所以如果我犯了任何錯誤,請原諒我,做一下評論澄清。Cronjob在perl腳本中不執行命令行
我創建了一個簡單的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點08分之後沒有新行插入到數據庫中。我已經搜索瞭解決方案,有些人建議使用DBI模塊,但它在服務器上不可用。
編輯:沒有設法解決它到底。使用root/admin帳戶來執行腳本,以便「解決」問題。第一
你是否有理由避免['DBI'模塊](http://metacpan.org/module/DBI)? – Borodin
你可以把'printf'改成'print'嗎? [docs](http://perldoc.perl.org/functions/printf.html)有一些有趣的說法,就是在文件句柄中使用'printf'並且沒有列表。 –
@MattJacob:只使用格式字符串而不使用'printf'沒有問題。文檔中關於省略的「列表」包含格式,如'printf FH',它等同於'printf FH $ _',但是具有像'printf $ fh'這樣的詞法文件句柄。Perl將解釋爲打印到當前 - 選擇的輸出句柄使用字符串化文件句柄'「$ fh」'作爲格式字符串 – Borodin