【发布时间】:2015-11-25 01:24:20
【问题描述】:
我有几个脚本计划在我的 crontab 中运行,但只能以 root 身份(或使用 sudo)查看它们。我需要一个 PHP 脚本(作为 nginx 运行)能够在 crontab 文件中添加一个新行。为此,我创建了一个 shell 脚本(由 root 拥有)并通过 /etc/sudoers 文件将 nginx 用户权限授予 sudo。
/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:
[ec2-user@ip-172-31-xx-xxx 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 文件的元信息:
[ec2-user@ip-172-31-xx-xxx nginx]$ pwd
/etc/nginx
[ec2-user@ip-172-31-xx-xxx 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 中的- 标记,但我的谷歌搜索表明这是正确的。另外,我尝试将sudo 添加到PHP 的exec 命令中,但随后出现以下错误:
sorry, you must have a tty to run sudo
我做错了什么或遗漏了什么,为什么?
【问题讨论】:
标签: php linux shell nginx cron