Как запустить программу как службу (без вывода сообщений)?


23

У меня есть сервер на базе Python, который я начинаю с терминала. Этот конкретный экземпляр терминала затем передает управление программе, и программа использует его как своего рода окно регистрации, пока оно не закроется. Это нормально, или я должен каким-то образом попытаться запустить программу каким-то другим способом, который будет просто отображаться как активный процесс? Если я закрываю терминал, с которого я запустил программу, программа умирает вместе с ним.

Спасибо


PHP упоминается в этом ответе , но это относится и к Python тоже: askubuntu.com/questions/26555/running-php-cli-server/...

Ответы:


9

Даже старый bash использует & для отправки процессов в фоновый режим, но есть и другие способы ... но есть два основных:

1.)$~ your_command > outputfile_for_stdout &
        # runs your command in background, giving you only PID so you can exit that process by `kill -9 PID_of_process`
        # & goes at the end of row      


2.)$~ your_command > outputfile_for_stdout 
        # this will run your program normally
        # press  Ctrl + Z then program will pause
   $~ bg
        # now your program is running in background
   $~ fg
        # now your program came back to foreground
3.)you can run terminal window under screen command so it will live until you either kill it or you reboot your machine
   $~ screen
   $~ run_all_your_commands
       # Ctrl + A + D will then detach this screen
   $~ screen -r will reattach it

Некоторые другие полезные команды:

   $~ jobs
        # will show you all processes running right now, but without PID
   $~ ps
        # will show you all processes for actual terminal window

Хммм, я использовал команду top для просмотра процессов до сих пор
U2ros

Отличное решение. Есть ли способ изменить вариант 1., чтобы pid был сохранен в файл. Таким образом, создается файл журнала и файл pid.
Огуз Билгич

27

Преврати его в демона (сервис)
daemon --name="yourservicename" --output=log.txt sh yourscript.sh


7
$ servicename &

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


Нет, это не так. Например. dixon@dixon-vaio:~$ nautilus & [1] 11835, Он возвращает идентификатор процесса, и вы получите новый запрос оболочки. Также проверьте это: http://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and .
dixoncx

1
Я стою исправлено. Голосование вниз убрано.
Скотт Северанс


0

С терминала вы также можете запустить screenили выполнить команду &. Простой способ запуска непрерывных процессов.


&по моему мнению, просто использовать в качестве фона процесс в этом случае мало. OP заявляет, что его сервер входит в stdout, поэтому &его терминал будет перегружен выводом. Кроме того, так как OP упоминает о закрытии терминала , OP не сможет снова поставить процесс на первый план, и все выходные данные журнала будут потеряны. Лучше, по крайней мере, перенаправить его в файл журнала или придерживаться screenнастройки - но тогда, пожалуйста, объясните основы screenOP (detach / attach / etc)
Robert Riedl
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.