Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ubuntu 运行dart服务器的最佳方法?_Ubuntu_Dart_Init - Fatal编程技术网

Ubuntu 运行dart服务器的最佳方法?

Ubuntu 运行dart服务器的最佳方法?,ubuntu,dart,init,Ubuntu,Dart,Init,我有一个用Dart编写的http服务器,我计划将其部署到Linux虚拟机上。现在,我的测试/演示服务器在Ubuntu数字海洋水滴上。有没有人有一个好的init脚本或者比使用linux init服务脚本更好的方法 编辑: 我现在的初始化脚本: #! /bin/sh ### BEGIN INIT INFO # Provides: dart # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs

我有一个用Dart编写的http服务器,我计划将其部署到Linux虚拟机上。现在,我的测试/演示服务器在Ubuntu数字海洋水滴上。有没有人有一个好的init脚本或者比使用linux init服务脚本更好的方法

编辑:

我现在的初始化脚本:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          dart
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Starts Dart
# Description:       This will start the dart runtime and in turn, start
### END INIT INFO

# Author: David Marchbanks <ptdave20@gmail.com>

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Dart Server"
NAME=dart
DAEMON=/usr/bin/$NAME
DART_SERVER=/home/dart/server/bin/server.dart
DAEMON_ARGS="$DART_SERVER"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
# and status_of_proc is working.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON $DAEMON_ARGS || return 2
    # Add code here, if necessary, that waits for the process to be ready
    # to handle requests from services started subsequently which depend
    # on this one.  As a last resort, sleep for some time.
}

#
# Function that stops the daemon/service
#
do_stop()
{
    # Return
    #   0 if daemon has been stopped
    #   1 if daemon was already stopped
    #   2 if daemon could not be stopped
    #   other if a failure occurred
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    [ "$RETVAL" = 2 ] && return 2
    # Wait for children to finish too if this is a daemon that forks
    # and if the daemon is only ever run from this initscript.
    # If the above conditions are not satisfied then add some other code
    # that waits for the process to drop all resources that could be
    # needed by services started subsequently.  A last resort is to
    # sleep for some time.
    start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
    [ "$?" = 2 ] && return 2
    # Many daemons don't delete their pidfiles when they exit.
    rm -f $PIDFILE
    return "$RETVAL"
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
    #
    # If the daemon can reload its configuration without
    # restarting (for example, when it is sent a SIGHUP),
    # then implement that here.
    #
    start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
    return 0
}

case "$1" in
  start)
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
    do_start
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  stop)
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
    do_stop
    case "$?" in
        0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
        2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  status)
    status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
    ;;
  #reload|force-reload)
    #
    # If do_reload() is not implemented then leave this commented out
    # and leave 'force-reload' as an alias for 'restart'.
    #
    #log_daemon_msg "Reloading $DESC" "$NAME"
    #do_reload
    #log_end_msg $?
    #;;
  restart|force-reload)
    #
    # If the "reload" option is implemented then remove the
    # 'force-reload' alias
    #
    log_daemon_msg "Restarting $DESC" "$NAME"
    do_stop
    case "$?" in
      0|1)
        do_start
        case "$?" in
            0) log_end_msg 0 ;;
            1) log_end_msg 1 ;; # Old process is still running
            *) log_end_msg 1 ;; # Failed to start
        esac
        ;;
      *)
        # Failed to stop
        log_end_msg 1
        ;;
    esac
    ;;
  *)
    #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
    echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
    exit 3
    ;;
esac

:
#/垃圾箱/垃圾箱
###开始初始化信息
#提供:飞镖
#必需的开始:$remote_fs$syslog
#所需停止:$remote_fs$syslog
#默认开始:2 3 4 5
#默认停止:0 1 6
#简短描述:启动Dart
#描述:这将启动dart运行时,然后启动
###结束初始化信息
#作者:David Marchbanks
#不要“设置-e”
#如果路径在mountnfs.sh脚本之后运行,则仅应包括/usr/*路径
路径=/sbin:/usr/sbin:/bin:/usr/bin
DESC=“Dart服务器”
名称=省道
守护进程=/usr/bin/$NAME
DART_SERVER=/home/DART/SERVER/bin/SERVER.DART
DAEMON_ARGS=“$DART_服务器”
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
#如果未安装程序包,请退出
[-x“$DAEMON”]| |退出0
#读取配置变量文件(如果存在)
[-r/etc/default/$NAME]&&&/etc/default/$NAME
#加载详细设置和其他rcS变量
. /lib/init/vars.sh
#定义LSB log_*函数。
#依赖lsb base(>=3.2-14)确保此文件存在
#进程的状态正在运行。
. /lib/lsb/init函数
#
#启动守护进程/服务的函数
#
你要开始吗
{
#返回
#如果守护进程已启动,则返回0
#1如果守护进程已在运行
#2如果守护进程无法启动
启动停止守护进程--启动--安静--pidfile$pidfile--exec$daemon--测试>/dev/null
启动停止守护进程--启动--安静--pidfile$pidfile--exec$daemon$daemon_ARGS | |返回2
#如有必要,在此处添加等待进程准备就绪的代码
#处理来自随后启动的服务的请求,这些服务依赖于
#在这一次。作为最后的手段,睡一段时间。
}
#
#停止守护进程/服务的函数
#
停止
{
#返回
#如果守护进程已停止,则返回0
#1如果守护进程已停止
#2如果无法停止守护进程
#如果发生故障,则为其他
start-stop守护进程--stop--quiet--retry=TERM/30/KILL/5--pidfile$pidfile--name$name
RETVAL=“$?”
[“$RETVAL”=2]&返回2
#如果这是一个分叉的守护进程,也要等待子进程完成
#如果守护进程只从这个initscript运行。
#如果不满足上述条件,则添加一些其他代码
#等待进程删除所有可能需要的资源
#随后启动的服务所需。最后一种方法是
#睡一会儿。
启动停止守护进程--停止--安静--oknodo--重试=0/30/KILL/5--执行$daemon
[“$?”=2]&返回2
#许多守护进程在退出时不会删除它们的文件。
rm-f$PIDFILE
返回“$RETVAL”
}
#
#向守护进程/服务发送SIGHUP的函数
#
你要重新加载吗{
#
#如果守护进程可以重新加载其配置而无需
#重新启动(例如,当发送SIGHUP时),
#然后在这里实现它。
#
启动-停止守护进程--停止--信号1--安静--pidfile$pidfile--名称$name
返回0
}
案件“$1”
开始)
[“$VERBOSE”!=no]&&log\u daemon\u msg“Starting$DESC”“$NAME”
你要开始吗
中的大小写“$?”
0 | 1)[“$VERBOSE”!=no]&记录消息0;;
2) [“$VERBOSE”!=no]&记录消息1;;
以撒
;;
(停止)
[“$VERBOSE”!=no]&&log\u daemon\u msg“Stopping$DESC”“$NAME”
你停下来吗
中的大小写“$?”
0 | 1)[“$VERBOSE”!=no]&记录消息0;;
2) [“$VERBOSE”!=no]&记录消息1;;
以撒
;;
(状态)
_proc“$DAEMON”“$NAME”和&exit 0的状态| | exit$?
;;
#重新加载(强制重新加载)
#
#如果未实现do_reload(),则将其注释掉
#并将“强制重新加载”保留为“重新启动”的别名。
#
#log_daemon_msg“正在重新加载$DESC”“$NAME”
#你要重新装货吗
#日志\结束\消息$?
#;;
重新启动(强制重新加载)
#
#如果实现了“重新加载”选项,则删除
#“强制重新加载”别名
#
日志\u daemon\u msg“重新启动$DESC”“$NAME”
你停下来吗
中的大小写“$?”
0|1)
你要开始吗
中的大小写“$?”
0)日志结束消息0;;
1) 日志结束消息1;#旧进程仍在运行
*)日志结束消息1;#启动失败
以撒
;;
*)
#未能停止
日志\u结束\u消息1
;;
以撒
;;
*)
#echo“用法:$SCRIPTNAME{start | stop | restart | reload | force reload}>&2
echo“用法:$SCRIPTNAME{start | stop | status | restart | force reload}>&2
出口3
;;
以撒
:

我建议您使用Docker()容器来安装Dart应用程序

下面是一个关于如何“dockerize”Dart应用程序的好例子:

因此,一般来说:

  • 您可以像这样向应用程序添加一个
    Dockerfile
  • 通过
    docker Run…
  • 准备就绪后,将应用程序部署到服务器,并添加docker容器的autostart,如下所述:
  • 此方法将允许您在任何操作系统上开发(Docker将VM用于非linux操作系统),并确保您的应用程序可以在生产服务器上运行


    事实上,它比听起来简单得多,但是统一了流程,所以你可以轻松地在任何“docker友好”的主机上托管你的应用程序,不仅是DigitalOcean,还有Amazon EC2、Google Compute,甚至是Microsoft的Azure

    你在寻找类似的东西吗?是的,我现在有一个init脚本,当我观看VM引导时,它会进入服务并挂起。仍然可以远程输入并执行其他操作,但只是挂起。理想情况下,我希望在没有额外安装的情况下尽可能保持服务的简单性/通用性。除了相关问题之外,我还没有看到其他任何东西(这并不意味着因为我在运行服务器方面没有太多经验)。大概