如何通过 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,但我不希望那样。

libssh2 不能帮你很多忙,但你可以用 phpseclib 轻松实现,这是一个纯粹的 PHP SSH 实现。

<?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 -en"); // 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("/usernamen");
$ssh->sleep(1); // $ssh->read() again
$ssh->write("dd");
$ssh->sleep(1);
$ssh->write(":exitn";
?>

经过一段时间和大量测试后,我找到了解决方案

 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 文件中

相关内容

最新更新