Часто случается ситуация, что нужно запустить приложение в Linux, которое не должно быть завершено при выходе пользователя, а режима демона у приложения нет.
На этот случай можно воспользоваться парой приемов.
Первый способ
Запустить в сессии программы screen, которая не завершается при выходе пользователя.
screen -d -m команда
использованные параметры:
-d -m — Запустить новый сеанс screen, но не подключаться к нему.
Так же можно использовать параметр:
-S имя — задать имя сессии screen для удобства поиска сессии по имени.
Пример:
screen -d -m -S backgroud_ping ping 127.0.0.1
1 | screen -d -m -S backgroud_ping ping 127.0.0.1 |
Эта команда запустит пинг адреса 127.0.0.1 и присвоит сессии имя backgroud_ping.
Для возврата к приложению и получению управления нужно:
посмотреть список активный сессий screen: screen -ls
1 | screen -ls |
в выводе консоли мы увидим имя и PID процесса: There is a screen on: 1218.backgroud_ping (13.05.2016 15:43:34) (Detached) 1 Socket in /var/run/screen/S-root.
123 | There is a screen on: 1218.backgroud_ping (13.05.2016 15:43:34) (Detached)1 Socket in /var/run/screen/S-root. |
запущенная сессия будет иметь имя backgroud_ping, и в данном случае, PID будет 1218.
теперь остается подключиться к процессу screen, это делается командой: screen -r номер_PID
1 | screen -r номер_PID |
в нашем случае это будет: screen -r 1218
1 | screen -r 1218 |
Мы получили обратно управление над приложением.
Второй способ
Использовать утилиту nohup, которая запустит приложение с игнорированием сигналов потери связи (SIGHUP), что позволит продолжить выполнение приложения после выхода пользователя из системы. nohup команда &
1 | nohup команда & |
вывод будет перенаправлен вместо консоли в файл nohup.out, который будет находиться в папке из которой производился запуск. Посмотреть вывод консоли можно командой: tail -f nohup.out
1 | tail -f nohup.out |
Пример: nohup ping 127.0.0.1 &
1 | nohup ping 127.0.0.1 & |
В данном случае вернуться к приложению и получить управление нельзя. его можно только завершить командой kill.
Третий способ
Использовать утилиту start-stop-daemon, которая создана для запуска в фоне приложений, которые сами не умеют переходить в фон. start-stop-daemon -S -b -x путь_и_имя_исполняемого_файла -m -p путь_и_имя_pid_файла
1 | start-stop-daemon -S -b -x путь_и_имя_исполняемого_файла -m -p путь_и_имя_pid_файла |
использованные параметры:
-S — запустить;
-b — запустить в фоне;
-x — полный путь и имя исполняемого файла;
-m — создать PID-файл с номером процесса;
-p — путь и имя PID-файла.
Если требуется запустить программу с параметрами, то параметры указываются в конце, после двойного тире (подробнее — в примере).
Пример: start-stop-daemon -S -b -x /bin/ping -m -v -p /run/ping.pid — -I eth0 127.0.0.1
1 | start-stop-daemon -S -b -x /bin/ping -m -v -p /run/ping.pid — -I eth0 127.0.0.1 |
В данном примере мы запускаем утилиту ping с параметрами (-I eth0 127.0.0.1) и создаем PID-файл (/run/ping.pid).
Для остановки программы использутся другие параметры: start-stop-daemon -K -x путь_и_имя_исполняемого_файла
1 | start-stop-daemon -K -x путь_и_имя_исполняемого_файла |
или start-stop-daemon -K -p путь_и_имя_pid_файла
1 | start-stop-daemon -K -p путь_и_имя_pid_файла |
использованные параметры:
-K — остановить;
-x — найти по имени запущенной программы;
-p — найти по PID-файлу .
Пример: start-stop-daemon -K -p /run/ping.pid
1 | start-stop-daemon -K -p /run/ping.pid |
Находим номер процесса, записанный в файл /run/ping.pid и останавливаем его.
Более правильно всегда использовать PID-файлы, потому что имя запускаемой программы не всегда равно имени запущенного процесса.
Источник: https://blackdiver.net/it/linux/4164
Leave a Reply