我有幾個腳本計劃在我的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