【问题标题】:Cron not executing my system() statement in PERLCron 没有在 PERL 中执行我的 system() 语句
【发布时间】:2016-11-30 05:06:34
【问题描述】:

我正在编写一个 PERL 脚本,该脚本从数据库中添加用户,然后删除数据库。当我执行它时,代码运行良好。

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)

有什么想法吗?

【问题讨论】:

  • 尝试将完整路径添加到useradd。 Crontab 没有得到环境的副本。
  • system 返回了什么错误? useradd 向 STDERR 发送了什么输出?
  • 添加第一行 #!/usr/bin/perl;将 cron 更改为 * * * * * /usr/bin/perl /var/perl/myperl.pl
  • @stevieb 成功了,谢谢。你可能想写 is 作为一个正确的答案。
  • 我已经回答了。

标签: perl shell cron centos crontab


【解决方案1】:

system() 调用中包含useradd 的完整路径。

Crontab 没有获取环境的副本,因此没有设置 PATH 环境变量。

【讨论】:

    猜你喜欢
    • 2013-11-17
    • 2012-03-02
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2011-09-27
    • 1970-01-01
    相关资源
    最近更新 更多