我如何让我的Golangnetworking服务器在后台运行?
我最近完成了Wiki Web开发教程(http://golang.org/doc/articles/wiki/)。 我有很多的乐趣,我想实验更多的净/ http包。
但是,我注意到,当我从控制台运行wiki时,wiki接pipe了控制台。 如果我closures控制台terminal或用ctrl + z停止进程,则服务器停止。
我怎样才能让服务器在后台运行? 我认为这个术语是在一个守护进程中运行的。
我在Ubuntu 12.04上运行这个。 谢谢你的帮助。
简单/可用的东西第一
如果你想要一个启动脚本没有太多的努力,你可以使用upstart
服务。 有关示例,请参见相应的手册页和/etc/init/*.conf
。 创build这样一个过程后,您可以通过调用启动您的服务器
service myserver start
如果你想要更多的function,如特定的限制或权限pipe理,你可以尝试xinetd
。
使用shell
你可以像这样开始你的过程:
nohup ./myexecutable &
&
告诉shell在后台启动命令,将其保存在作业列表中。 在某些shell中,如果父shell使用HANGUP信号退出,则作业会被终止。 为了防止这种情况发生,可以使用nohup
命令启动命令, nohup
命令丢弃HANGUP信号。
但是,如果被调用的进程重新连接HANGUP信号,这不起作用。
要确定,你需要从shell的工作列表中删除这个进程。 对于两个众所周知的炮弹,可以这样做:
庆典:
./myexecutable & disown <pid>
zsh的:
./myexecutable &!
杀死你的后台工作
通常情况下,shell会打印进程的PID,然后使用kill
命令将其终止,以停止服务器。 如果你的shell不打印PID,你可以使用它
echo $!
直接执行后。 这将打印分叉进程的PID。
您可以使用Supervisord来pipe理您的stream程。
Ubuntu的? 使用upstart
。
在/etc/init
为您的作业创build一个名为your-service-name.conf
start on net-device-up exec /path/to/file --option
您可以使用start your-service-name
,以及: stop
, restart
, status