2014-04-01 49 views
0

我正在編寫一個需要在PHP中動態添加cron的腳本。我用這個命令插入一個新的作業:如何通過SSH刪除一個cron作業?

ssh2_exec($connection, '(echo "* * * * * /usr/local/bin/php -q /home/username/www/index.php 1 '.$user.' >/dev/null 2>&1 ") | crontab -u username -'); 

其中$user是一個變量。

現在,如果$user被刪除我想刪除其相關cron作業。

有沒有辦法從crontab中刪除特定行?我知道

crontab -u username -r 

將刪除用戶名的所有cron,但我不想這樣。

回答

0

我發現一段時間後的溶液及大部分測試

ssh2_exec($connection, 'crontab -u username -l > /home/crontmp/tmp.txt;replace -s "0 0 1 1 * /usr/local/bin/php -q /home/username/www/index.php 1 '.$userPhone.' >/dev/null 2>&1" "" -- /home/crontmp/tmp.txt;crontab -u username -r;(cat /home/crontmp/tmp.txt) | crontab -u username -'); 

的想法是,獲得該用戶的所有crons然後將其添加到一個tmp文件,然後替換刪除行,我想刪除然後添加修改後的文件與cron文件再次

0

不能幫你非常符合libssh2但你可以很容易地phpseclib, a pure PHP SSH implementation足夠完成這項工作。

<?php 
include('Net/SSH2.php'); 

$ssh = new Net_SSH2('www.domain.tld'); 
if (!$ssh->login('username', 'password')) { 
    exit('Login Failed'); 
} 

$ssh->read('[email protected]:~$'); 
$ssh->write("crontab -e\n"); // note the "\n" 
$ssh->sleep(1); // you could probably $ssh->read() up to a certain byte but idk what that byte would be 
$ssh->write("/username\n"); 
$ssh->sleep(1); // $ssh->read() again 
$ssh->write("dd"); 
$ssh->sleep(1); 
$ssh->write(":exit\n"; 
?> 
+0

抱歉,但是,如果寫一個從$ SSH->每一行讀(「用戶名@用戶名:〜$」)評論; ,我無法理解線路 –

+0

毫無疑問,因爲ANSI轉義碼:http://en.wikipedia.org/wiki/ANSI_escape_code要「解碼」它們,您需要一個終端仿真程序。看到http://phpseclib.sourceforge.net/ssh/examples.html#top – neubert

+0

我們可以忽略php編碼,我想要一個ssh命令的代碼從cron中刪除一個jop –