Назад | Перейти на главную страницу

Есть ли простой способ выполнить простую задачу?

Я подключаюсь по ssh к серверу, чем запускаю задание (например, rsync), тогда я просто хочу иметь возможность выйти из системы и позволить заданию работать своим чередом. Но если я просто сделаю rsync ... & Я думаю, что он все еще каким-то образом связан с tty, и что задание умирает, когда tty уходит при выходе из системы. Есть ли какой-нибудь (простой) способ отключить процесс от tty, чтобы иметь возможность выйти из системы без завершения процесса?

вы можете начать это в экран

nohup rsync ... &

Кажется, делаю именно то, что хочу.

Использовать setsid и перенаправить дескрипторы 1 и 2 на /dev/null.

например

setsid \
  perl -e 'for ( my $i = 0; 1; $i++ ) { $0 = "forever $i"; sleep( 1 ); }' \
  1>/dev/null \
  2>/dev/null

Без setsid и завершающий амперсанд команду ps ax показывает:

13526 pts/4    S      0:00 forever 11

С участием setsid и без конечного амперсанда команда ps ax показывает:

13520 ?        Ss     0:00 forever 68

... означает отсутствие подключенного TTY.

В Linux (по крайней мере, в Ubuntu) вы можете использовать start-stop-daemon

Если все, что вам нужно, это запустить процесс и оставить его запущенным, вы можете использовать

at now

В Debian и Ubuntu есть пакет под названием демон который, кажется, является частью libslack проект.