【问题标题】:How to delete one cron job via SSH?如何通过 SSH 删除一项 cron 作业?
【发布时间】:2014-09-02 03:05:42
【问题描述】:

我正在编写一个需要在 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

将删除用户名的所有 cron,但我不想这样做。

【问题讨论】:

    标签: php ssh cron


    【解决方案1】:

    对于 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";
    ?>
    

    【讨论】:

    【解决方案2】:

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

     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 -');
    

    想法是,获取用户的所有 cron,然后将其添加到 tmp 文件中,然后替换删除我要删除的行,然后再次将修改后的文件添加到 cron 文件中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多