Имам скрипт на python, който се свързва с отдалечен сървър с операционна система lenny. Той изпълнява процес във фонов режим, като използва следния ред:
shell.send("cd /my/directory/; nohup ./exec_name > /dev/null 2>&1 &\n")
След това след някои други кодове, той изпраща команда kill
към сървъра, за да спре изпълнението на процеса; ето го кода:
shell.send("kill -9 process_pid \n")
Не връща грешка, но не убива процеса и все още е жив в системата. Опитах и killall -9 process_name
, но получих същия резултат. Някаква помощ?
За повече информация ето кода за свързване към сървъра:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname = "host_ip", username = "un"], password = "up")
channel = ssh.get_transport().open_session()
pty = channel.get_pty()
shell = ssh.invoke_shell()
Трябва да спомена, че потребителят има root права.
РЕДАКТИРАНЕ 1:
Забравих да кажа, че пробвах това:
ssh.exec_command("kill -9 process_pid \n")
Но върна тази грешка:
SSHClient is not active right now.
Редактиране 2:
Както @JimB спомена в коментара, проблемът с exec_command
е, че транспортът е закъсал. Направих временна SSH връзка и убих процеса с това; беше успешно. Но все още търся по-добър начин.
sudo
привилегии, но бих го сметнал и за опасно. В този контекст мисля, че не е необходима специална власт, тъй като на потребителя е позволено да убива процеси, които притежава. Поне на всяка Linux система, върху която съм работил. Опитвали ли сте да издадете еквивалентнаssh
дистанционна команда от друга система на ръка (нещо катоssh name@remote "kill pid"
)? Средата, настроена за интерактивен ssh и неинтерактивен, се различават малко от приемащия край. Може да се окаже, че не е свързано с python. - person luk32   schedule 03.02.2014fabric
преди, но това не е достатъчно за моята програма. Има някои ограничения, които пречат на работата ми. - person Zeinab Abbasimazar   schedule 03.02.2014exec_command
? Също така, „SSHClient не е активен в момента.“ означава, че използвате остарял транспорт. Вземете транспорт от текущата си връзка. - person JimB   schedule 04.02.2014Exception paramiko.SSHException: SSHException('SSH session not active',)
. Но благодаря, че отбелязахте за остарелия транспорт. Направих нова временна SSH връзка и тя успешно уби процеса; но аз все още искам по-добър начин да направя това, нямате ли нещо предвид? - person Zeinab Abbasimazar   schedule 04.02.2014