我有几个脚本计划在我的crontab中运行,但只能看到它们作为根(或使用sudo)。我需要一个PHP脚本(它以nginx的形式运行)能够将新行添加到crontab文件中。为此,我创建了一个shell脚本(由root拥有),并通过/etc/sudoers
文件将nginx
用户的权限授予sudo
。通过PHP Shell:无法添加新的cron作业到crontab
的/etc/sudoers
文件的最后一行:
nginx ALL=NOPASSWD: /etc/nginx/addcron.sh
PHP的调用来执行脚本:
chdir("/etc/nginx/");
echo exec("2>&1 ./addcron.sh $custname", $output);
echo "<pre>".print_r($output, true)."</pre>";
我目前的crontab:
[[email protected] nginx]$ sudo crontab -l
* * * * * env > /tmp/env.output
* * * * * /usr/bin/php -f /var/www/html/example/cron/cron.php
* * * * * /usr/bin/php -f /var/www/html/demo/cron/cron.php
0 23 * * * rm /tmp/cachegrind.out.*
约我addcron.sh
元信息文件:
[[email protected] nginx]$ pwd
/etc/nginx
[[email protected] nginx]$ ls -al addcron.sh
-rwxr-xr-x 1 root root 129 Nov 24 22:16 addcron.sh
的addcron.sh
内容:
#!/bin/bash
custname="$1"
(crontab -l; echo \"* * * * * /usr/bin/php -f /var/www/html/$custname/cron/cron.php\") | crontab -
当我尝试虽然运行此,我得到以下错误:
errors in crontab file, can't install.
Array
(
[0] => "-":102: bad minute
[1] => errors in crontab file, can't install.
)
现在看来似乎不喜欢在-
马克addcron.sh
,但我的Google搜索建议这是正确的。另外,我还尝试添加sudo
到PHP的exec
命令,但我只是得到了以下错误:
sorry, you must have a tty to run sudo
我在做什么错误或丢失,为什么?
谢谢,我会考虑收紧安全。删除引号排除了错误信息,但'crontab -e'仍然有相同的内容,这很奇怪;我希望有一个错误或内容被添加,但都没有发生。 – Bing
您是否正在检查正确用户的crontab(如果在sudo下执行,调用脚本或'root')? –
调用脚本的一个是'nginx',当我尝试给他们''su'或者像他们一样运行命令时('runuser -l nginx -c'crontab -l''),我得到消息'This Account is currently不可用.'我试图在'root'下运行它,这就是为什么我把'nginx ALL = NOPASSWD:/ etc/nginx/addcron.sh'加到'/ etc/sudoers'中的原因,但'sudo crontab -l'不显示新条目,这就是为什么我很困惑,因为没有错误信息。 – Bing