为什么在服务器重启后,守护进程模式下的HHVM无法自动启动?

时间:2014-02-21 13:05:55

标签: php daemon hiphop hhvm

HipHop / HHVM可以作为守护进程运行(因此在重新启动后会自动启动)

sudo /usr/bin/hhvm --mode daemon --config /etc/hhvm/server.hdf

运行时,它完美运行(表明配置正常)。但重新启动机器后,HHVM消失了,需要手动重启。以上行包括这些配置已从HHVM创建者的官方教程中删除。像sudo service hhvm start这样的经典服务语法也可以很好地工作,但不会超过机器重启。

我采取了哪些措施来追查问题:

/var/log/hhvm/error.log中的HHVM错误日志在每次重新启动时记录此行:Unable to open pid file /var/run/hhvm/pid for write/etc/hhvm/server.hdf在第一行有PidFile = /var/run/hhvm/pid。由于默认情况下它附带HHVM,我不想更改它。我认为 sudo 就是问题所在。没有sudo HHVM将无法运行。 Chmod 777'将pid文件指向另一个空文件并不能解决问题。

问题:

将HHVM作为守护程序安装的正确方式是什么?

1 个答案:

答案 0 :(得分:17)

手动方式

参考HHVM's own packaging material,你需要运行hhvm作为守护进程。

所以,在/etc/init.d/hhvm创建一个文件并粘贴它:

#! /bin/sh

test -x /usr/bin/hhvm || exit 0

case "$1" in
  start)
        /usr/bin/hhvm --config /etc/hhvm/server.hdf --user www-data --mode daemon
        ;;
  stop)
        start-stop-daemon --stop --quiet --oknodo --pidfile /var/run/hhvm/pid
        ;;

  reload|force-reload|restart|try-restart)
        $0 stop
        $0 start
        ;;

  status)
        echo "No status"
        ;;

  *)
        echo "Usage: /etc/init.d/hhvm {start|stop|restart|status}"
        exit 1
esac

exit 0

现在,我们需要创建/etc/hhvm/server.hdf文件。这是一个示例文件:https://gist.github.com/sinaa/9151973

对于/usr/share/hhvm/hdf/static.mime-types.hdf文件,请使用: https://github.com/hhvm/packaging/blob/master/hhvm/deb/skeleton/usr/share/hhvm/hdf/static.mime-types.hdf

最后,创建目录:

  • 的/ var /运行/ HHVM
  • 的/ var /日志/ HHVM

现在只需将hhvm作为服务启动:    /etc/init.d/hhvm restart


自动化方式:安装预构建的软件包(Ubuntu)

如果您使用的是预建版本,默认情况下HHVM会带有以上所有内容。您可以按以下(source)安装它:

# If this command is not found then do this: sudo apt-get install python-software-properties
sudo add-apt-repository ppa:mapnik/boost
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449
echo deb http://dl.hhvm.com/ubuntu precise main | sudo tee /etc/apt/sources.list.d/hhvm.list
sudo apt-get update
sudo apt-get install hhvm

重启后

要使您的服务在引导时自动运行,请运行以下命令:

sudo update-rc.d hhvm defaults