LINUX.ORG.RU

run ssh job in background


0

2

Товарищи!

Постиг меня лютый фейл в попытке нарандомить решение самому, посему сердечно прошу вашей помощи!

Задача: Есть удаленная машина с sshd на которой хочется выполнить сложный но однострочный скрипт в конце которого ребут, той самой машины. Проблема в том, что нужно создать задачу в фоне, разорвать сессию и чтобы та при том не умерла...

пробовал по всякому играться с nohup, & и созданием временных скриптов на удаленной машине, но надежно работающего результата добиться не получилось =(

upd. ко всему прочему на той машине tcsh

upd2. машина специфичная и поставить на нее всякие screen/tmux не является возможным

upd3. и да, `at` на ней тоже не стоит



Последнее исправление: fijiol (всего исправлений: 4)
Ответ на: комментарий от true_admin

в смысле ssh name@host «tmux new -d -s test YOUR_CMD» или типа того

true_admin ★★★★★
()
ssh yourhost
cat "<YOUR_SCRIPT>; reboot" > script
chmod +x script
ssh yourhost "screen -d -m ./script"
observer ★★★
()
Ответ на: комментарий от observer

проблема в том, что таких машин over9000 и не я их админ. Более того заранее даже не знаю, на какой новоя меня попросят выполниться

fijiol
() автор топика
Ответ на: комментарий от observer

крон периодически выполняет задачи, а добавлять в скрипт удаления себя же из crontab... как-то избыточно что ли, и какой-то совсем жирный однострочник получится)

п.с. однострочник очень хотеть ввиду специфики ssh драйвера и того, как мы его вызываем

fijiol
() автор топика
Ответ на: комментарий от observer

софт тестовый, вполне себе мирный, инсайдерский

fijiol
() автор топика
Ответ на: комментарий от fijiol

в сторону expect не cмотрели?
что-то типа

#!/usr/bin/expect -f

set ipaddr [ lrange $argv 0 0 ]
set password "passord\!"
spawn ssh login@$ipaddr
expect {
    "> " { }
    "$ " { }
    "assword: " {
    send "$password\n"
    }
"(yes\no)? " {
    send "yes\n"
  }
}
send"Your cmd"

Dob
()
Ответ на: комментарий от sdio

про at написал, не стоит, и не хотеть заморачиваться с его установкой

fijiol
() автор топика

пробовал по всякому играться с nohup, & и созданием временных скриптов на удаленной машине, но надежно работающего результата добиться не получилось =(

тоесть как это не получилось? nohup на 100% справляется с такими задачами.

redixin ★★★★
()
Ответ на: комментарий от zolden

делал что-то в духе '(sleep 10 && echo 1)& disown `jobs -p`' ssh сессия остается висеть, пробовал добавлять exit чет не помогло

fijiol
() автор топика
Ответ на: комментарий от fijiol

( nohup ... ) &

в таком виде, ssh как правило все равно ждет завершения дочерних процессов

kill $ssh_pid

sdio ★★★★★
()
Ответ на: комментарий от beastie

запускаемся к сожалению не из CLIного ssh а из специфичного драйвера, который вроде не умеет в такую опцию

fijiol
() автор топика
Ответ на: комментарий от fijiol

блджад

в конце сделай

kill -9 $(lsof -ti :$(echo $SSH_CONNECTION | awk '{print $2}')) 

upd
хотя подозреваю твой драйвер и SSH_CONNECTION не выставляет...

zolden ★★★★★
()
Последнее исправление: zolden (всего исправлений: 1)
Ответ на: комментарий от beastie

можно попытаться и клиент поковырять, да вот казалось бы тривиальная задача, реализация которой ну уж должна быть в шелле... создать таску совсем в фоне, совсем зааттаченой

fijiol
() автор топика
Ответ на: комментарий от fijiol

в шелле такая реализация есть, тебе их уже дюжину тут показали
проблема не в шелле, а во внятной формулировке задачи

давай начнём с начала: какая изначально стоит задача и каковы условия (что за железка/дистрибутив/что позволяет твой драйвер)

zolden ★★★★★
()
Ответ на: комментарий от beastie

а ларчик просто открывался

для tcsh:

ssh host "(nohup command > /dev/null &) >& /dev/null"

(stdout, stderr, а ещё лучше и stdin надо перенаправить в /dev/null)

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 1)
Ответ на: комментарий от zolden

задача есть однострочник, который уходит как аргумент ssh клиента, хотеть, login, оддать скрипт, он бежит в фоне, сессия закрылась и вернула управление.

fijiol
() автор топика
Ответ на: комментарий от fijiol

не, я про

разорвать сессию
сессия закрылась и вернула управление
ssh сессия остается висеть

чем мешает сессия?

zolden ★★★★★
()
Ответ на: комментарий от zolden

когда машина уходит в ребут, она остается висеть уходя в очень большой таймаут, а даже если и когда-нибудь прервется по нему, то это снаружи будет выглядеть как ошибка, ходя ребут закончился ведь удачно

fijiol
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.