我正在编写一个需要在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,但我不想要。
答案 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文件