【发布时间】:2016-02-09 17:13:13
【问题描述】:
我正在尝试通过调用 bash 脚本的 PHP 脚本(在同一台服务器上运行)创建一个用户并向用户 crontab(系统上的任何用户)添加一个条目。
我已经解决了创建用户的问题,这工作正常,但是通过 PH 脚本调用时,bash 脚本中用于向该新用户添加条目的最后一行 crontab 不起作用。我已经确认它在本地运行时确实有效。
我有以下 PHP 脚本:
<?php
//system("whoami");
chdir('/var/www/html/sandpit/users/');
$user = "test2";
$user=escapeshellarg($user);
$output = shell_exec("./create_user.sh $user");
echo "<pre>$output</pre>";
//echo "<br>ends";
?>
而create_user.sh的内容是:
#!/bin/bash
export user=$1
sudo /usr/sbin/useradd $user -M
sudo echo "0 1 * * * /root/test.sh" | tee -a /var/spool/cron/crontabs/test2
在最后一行中,我将变量硬编码为实际名称“test2”以一次处理一个问题,尽管我知道 $user 包含“test2”,因为它正确地创建了用户。
我已将这些行添加到 /etc/sudoers:
www-data ALL=(ALL:ALL) ALL
www-data ALL=(ALL) NOPASSWD: ALL
所以我的问题是,为什么编辑用户 crontab 的最后一行在本地运行(以 root 身份)时有效,但在通过脚本调用时不运行?我认为这是一个权限问题,因为我知道命令行在手动运行时可以正常工作。
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
您需要 sudo 用于 tee 而不是 echo。 tee 不是以 root 权限执行的。
-
@GerdK 谢谢您,先生,这非常有效。请标记为我接受的答案