通过 PHP 调用的 bash 脚本编辑用户 crontab

Editing a users crontab via bash script called via PHP

我正在尝试通过 PHP 脚本(运行ning 在同一台服务器上)创建一个用户并向用户 crontab(系统上的任何用户)添加一个条目,该脚本调用一个bash 脚本。

我已经解决了创建用户的问题,这工作正常,但是 bash 脚本中用于向新用户添加条目的最后一行 crontab 在通过 PH 脚本调用时不起作用。我已经确认它在本地 运行 时确实有效。

我有以下 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= 
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)时有效,但在通过脚本调用时 运行 无效?我认为这是一个权限问题,因为我知道命令行可以正常工作,因为它是手动 运行s。

如有任何帮助,我们将不胜感激。谢谢。

你需要 sudo 才能发球,而不是回声。 tee 未以 root 权限执行。