Как использовать экран для выдачи команды в фоновом режиме через сеанс SSH
Я привык использовать терминалы linux и nohup over ssh, чтобы выдавать команды, которые выполняются в фоновом режиме, даже когда они вышли из сеанса ssh. По некоторым причинам nohup, кажется, сломан в последней версии MACOS. По этой причине я пытаюсь выполнить этот небольшой пример сценария с помощью экранной команды.
sleep 10
echo "this is my test file" > testfile
Этот файл сохраняется как скрипт tst. И тогда я выдаю следующую команду.
ssh sohaib@localhost screen -dm sh testscript
Однако ничего не происходит. Экран просто тихо выходит без записи в файл тестового файла. Если я запускаю это без SSH, он работает как хотелось бы. Что я здесь не так делаю?
1 ответ
Проблема в том, что после выхода из вашего скрипта экран выходит. -dm
для демонов, то есть скриптов, которые продолжают работать.
Отображение экрана, выходящего через 10 секунд:
На удаленном хосте (файл исполняемый):
ttucker@merlin:~$ cat test.sh
#!/bin/bash
echo derp > /tmp/test.txt
sleep 10
Команда на локальной машине:
[ttucker@localhost ~]$ ssh ttucker@merlin 'screen -dmS my_screen ~/test.sh'
После запуска.
На удаленной машине через несколько секунд после запуска экрана:
ttucker@merlin:~$ screen -ls
There is a screen on:
23141.my_screen (11/21/2016 07:05:11 PM) (Detached)
1 Socket in /var/run/screen/S-ttucker.
Через 10 секунд на удаленном компьютере:
ttucker@merlin:~$ screen -ls
No Sockets found in /var/run/screen/S-ttucker.
Модификация скрипта для продолжения работы и сохранение экрана вверх:
Если вы действительно запускаете сценарий, который нужно поддерживать, вы можете сделать следующее в сценарии:
#!/bin/bash
while true; do
# Do something
sleep 10
done
Это будет что-то делать, подождите 10 секунд, а затем повторите цикл.
Или отсоединение экрана вручную:
Вы можете SSH к удаленной машине, запустить экран, а затем нажмите Ctrl+A,D
, Нажмите Ctrl
и удерживайте, затем нажмите A
затем нажмите D
, Теперь вы можете выйти из сеанса SSH, и экран продолжит работать.