如何将程序作为服务运行(无提示)?


23

我有一个基于python的服务器,我从终端启动。然后,该终端的特定实例将控制权交给程序,程序将其用作一种日志记录窗口,直到将其关闭。这是正常现象吗,还是我应该尝试以其他方式启动程序,使其简单地显示为活动进程?如果我关闭从其启动程序的终端,程序将随之终止。

谢谢


PHP是这个答案提及,但它适用于Python的,太: askubuntu.com/questions/26555/running-php-cli-server/...

Answers:


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 2012年

很好的解决方案。有没有办法修改1.选项,以便将pid保存到文件。这样就生成了一个日志文件和一个pid文件。
Oguz Bilgic '18

27

将其转换为守护程序(服务)
daemon --name="yourservicename" --output=log.txt sh yourscript.sh




0

在终端上,您还可以运行screen或跟进命令&。运行连续过程的简便方法。


&我认为,在这种情况下仅使用后台流程是很少的。OP指出他的服务器登录到stdout,这样&终端的输出将变得混乱不堪。另外,由于OP提到关闭终端,因此OP将无法再次前台处理该进程,并且所有日志输出都将丢失。至少,最好将其重定向到日志文件或坚持使用screen设置-但是,请解释一下screenOP 的基本知识 (分离/附加/等)
Robert Riedl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.