2016-07-26 7 views
0

データベースからユーザーを追加してデータベースを削除するPERLスクリプトを作成しています。私はそれを実行するとコードが正常に動作します。PERLで私のsystem()ステートメントを実行していない

use DBI; 
use strict; 
my $database = "database"; 
my $hostname = "123.4.56.78"; 
my $port = "3306"; 
my $user = "user"; 
my $password = "password"; 
my $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port"; 
my $dbh = DBI->connect($dsn,$user,$password) or die "Can't connect to database: ", $DBI::errstr, "\n"; 


my $sql = 'SELECT * FROM somewhere'; 
my $sth = $dbh->prepare($sql); 
$sth->execute(); 
while (my @row = $sth->fetchrow_array) { 
system("useradd -g mygroup -d /home/somewhere/$row[0] -s /sbin/nologin $row[0]"); 
system("echo $row[0]:$row[1] | chpasswd"); 
} 
my $sql_delete = 'TRUNCATE somewhere'; 
my $delete = $dbh->prepare($sql_delete); 
$delete->execute(); 

しかし、私がCrontabで実行すると、system()文は決して実行されず、ユーザは追加されません。彼らはデータベース自体から削除されます。

* * * * * perl /var/perl/myperl.pl 

ログは毎分を言う:

Jul 26 15:42:01 ex40 CROND[7028]: (root) CMD (perl /var/perl/myperl.pl) 

任意のアイデア?

+3

'useradd'のフルパスを追加してみてください。 Crontabは環境のコピーを取得しません。 – stevieb

+2

'system'は何のエラーを返しましたか? 'useradd'がSTDERRに送る出力は? – ikegami

+0

最初の行を追加#!/ usr/bin/perl; cronの変更は* * * * */usr/bin/perl /var/perl/myperl.pl –

答えて

4

コールには、useraddへのフルパスを含めます。

Crontabは環境のコピーを取得しないため、環境変数PATHは設定されません。

関連する問題