我最近完成了Wiki网站开发教程(http://golang.org/doc/articles/wiki/)。 我玩得很开心,我想用net / http包做更多的实验。
但是,我注意到从控制台运行Wiki时,该Wiki将接管控制台。 如果关闭控制台终端或使用CTRL + Z停止该过程,则服务器将停止。
如何使服务器在后台运行? 我认为该术语在守护程序中运行。
我正在Ubuntu 12.04上运行它。 谢谢你的帮助。
简单/可用的东西优先
如果您不费吹灰之力就需要启动脚本,则可以使用upstart服务。有关示例,请参见相应的手册页和/etc/init/*.conf。创建这样的过程之后
您可以通过调用来启动服务器
service myserver start
如果您想要更多功能,例如特定限制或权限管理,则可以尝试xinetd。
使用外壳
您可以像这样开始您的过程:
nohup ./myexecutable &
&告诉外壳程序在后台启动命令,并将其保留在作业列表中。
在某些外壳上,如果父外壳使用HANGUP信号退出,则作业将被杀死。
为避免这种情况,可以使用nohup命令启动命令,该命令将放弃HANGUP信号。
但是,如果被调用的进程重新连接了HANGUP信号,这将不起作用。
确实可以确定,您需要从Shell的作业列表中删除该过程。
对于两个众所周知的外壳,可以通过以下方式实现:
重击:
./myexecutable &
disown
zsh:
./myexecutable &!
杀死背景工作
通常,外壳程序会打印该进程的PID,然后可以使用kill命令将其终止,以停止服务器。如果您的外壳未打印PID,则可以使用
echo $!
直接在执行后。这将打印派生过程的PID。
那我该如何退回并停止它或重新启动?
我更新了有关流程启动/停止的答案:)
当关闭终端时,&仍会暂停命令(取决于您的外壳)。 在bash中,您需要在screen,nohup或disown中使用&或ctrl+Z为背景运行它
@lunixbochs,您可能不应该依赖于此上的shell行为。 病态更新我的答案。
感谢您提供如此详细的答案! 我可以看到,如果您在启动后台进程时忘记记录PID,那么像upstart这样的程序将很方便。 我将尝试两种技术并进行报告。
您可以使用Supervisord来管理您的流程。
Monit是另一种选择。
Ubuntu的?使用upstart。
在您的工作的/etc/init中创建一个名为your-service-name.conf的文件
start on net-device-up
exec /path/to/file --option
您可以使用start your-service-name,以及:stop,restart,status
新贵似乎已经被systemd取代了,不是吗? 现在该怎么办? 在Ubuntu LTS 14.04上