我最近完成了Wiki Web 开发教程(http://golang.org/doc/articles/wiki/)。我有很多乐趣,我想尝试更多的 net/http 包。
但是,我注意到当我从控制台运行 wiki 时,wiki 会接管控制台。如果我关闭控制台终端或停止进程,CTRL+Z则服务器停止。
如何让服务器在后台运行?我认为这个术语是在守护进程中运行的。
我在 Ubuntu 12.04 上运行它。谢谢你的帮助。
我最近完成了Wiki Web 开发教程(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 &
&
告诉 shell 在后台启动命令,并将其保存在作业列表中。在某些 shell 上,如果父 shell 使用 HANGUP 信号退出,则作业将被终止。为防止这种情况,您可以使用命令启动nohup
命令,该命令会丢弃 HANGUP 信号。
但是,如果被调用进程重新连接 HANGUP 信号,这将不起作用。
确实,您需要从 shell 的作业列表中删除该进程。对于两个众所周知的 shell,这可以实现如下:
./myexecutable &
disown <pid>
./myexecutable &!
通常,shell 会打印进程的 PID,然后可以使用kill
命令将其终止,以停止服务器。如果你的 shell 不打印 PID,你可以使用
echo $!
执行后直接。这将打印分叉进程的 PID。
您可以使用Supervisord来管理您的流程。
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
,而不是一个全面的教程,而是如何设置的快速入门。
您的app.service
文件内容
[Unit]
Description=deploy-webhook service
After=network.target
[Service]
ExecStart=/usr/bin/go webhook.go
WorkingDirectory=/etc/deploy-webhook
User=app-svc
Group=app-svc
Restart=always
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=deploy-webhook-service
PrivateTmp=true
Environment=APP_PARAM_1=ParamA
Environment=APP_PARAM_2=ParamB
[Install]
WantedBy=multi-user.target
启动服务
sudo systemctl start deploy-webhook.service
服务状态
sudo systemctl status deploy-webhook.service
日志
journalctl -u deploy-webhook -e
按ctrl+ z(使当前任务进入睡眠状态)后,您可以bg
在终端(代表后台)中运行命令,让最新的任务继续在后台运行。
需要时,运行fg
以返回任务。
要获得相同的结果,您可以&
在最后添加命令以在后台启动它。