我正在尝试创建用户并通过调用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身份运行)但在通过脚本调用时不运行?我认为这是一个权限问题,因为我知道命令行在手动运行时正常工作。
任何帮助将不胜感激。感谢。
答案 0 :(得分:1)
你需要sudo for tee而不是echo。 tee不以root权限执行。