如何通过SSH删除一个cron作业?

时间:2014-04-01 14:48:40

标签: php ssh cron

我正在编写一个需要在PHP中动态添加crons的脚本。我使用此命令插入新作业:

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

会删除用户名的所有crons,但我不想要。

2 个答案:

答案 0 :(得分: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('username@username:~$');
$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";
?>

答案 1 :(得分: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文件