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


Editing a users crontab via bash script called via PHP

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

我已经解决了有关创建用户的问题,这工作正常,但是 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=$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,而不是回声。 tee 不是以根权限执行的。