linux - 在启动时运行单声道应用程序而不创建服务

标签 linux mono debian

我有一个单声道 C# 单声道应用程序,带有一个简单的菜单,甚至不需要输入即可工作。我想要做的是在启动时启动应用程序,而不使用 ubuntu 的 StartUp。我使用的是 raspbian,并且希望将应用程序作为后台进程而不是服务启动。

到目前为止我所拥有的是启动它的命令:

start-stop-daemon --start --quiet --pidfile /home/pi/pid/EDM.pid --exec /home/pi/Mono/EDM.exe --test

我需要的是在操作系统启动时运行此命令。我已经尝试过这个脚本:

        #! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          mn
    # Required-Start:    $remote_fs $syslog
    # Required-Stop:     $remote_fs $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Start daemon at boot time
    # Description:       Enable service provided by daemon.
    ### END INIT INFO
    # Author: 
    #
    # 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="Mono Daemon"
    NAME=EDM.exe
    DAEMON=/home/po/Mono/EDM.exe
    PIDFILE=/home/pi/pid/EDM.pid
    SCRIPTNAME=/etc/init.d/mn.sh
    CHUID=pi
    # Exit if the package is not installed
    [ -x "/home/pi/Mono/EDM.exe" ] || exit 0
    # Read configuration variable file if it is present
    #[ -r /etc/default/EDM.exe ] && . /etc/default/EDM.exe

    # Load the VERBOSE setting and other rcS variables
    . /lib/init/vars.sh
    # Define LSB log_* functions.
    # Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
    . /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 /home/pi/pid/EDM.pid --exec /home/pi/Mono/EDM.exe --test > /dev/null \
          || return 1
       start-stop-daemon --start --quiet --chuid root --pidfile /home/pi/pid/EDM.pid --exec /home/pi/Mono/EDM.exe -- \
          /home/pi/Mono/EDM.exe_ARGS \
          || return 2
    }
    #
    # 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 /home/pi/pid/EDM.pid --name EDM.exe
       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 /home/pi/Mono/EDM.exe
       [ "$?" = 2 ] && return 2
       # Many daemons don't delete their pidfiles when they exit.
       rm -f /home/pi/pid/EDM.pid
       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 /home/pi/pid/EDM.pid --name EDM.exe
       return 0
    }
    case "$1" in
      start)
       [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "EDM.exe"
       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" "EDM.exe"
       do_stop
       case "$?" in
          0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
          2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
       esac
       ;;
      #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" "EDM.exe"
       #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" "EDM.exe"
       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|restart|force-reload}" >&2
       exit 3
       ;;
    esac
    :

我使用 update-rc.d mn 默认值,它显示以下错误: 更新-rc.d:

using dependency based boot sequencing
insserv: Script mn is broken: incomplete LSB comment.
insserv: missing `Provides:' entry: please add.
insserv: missing `Required-Start:' entry: please add even if empty.
insserv: missing `Required-Stop:'  entry: please add even if empty.
insserv: missing `Default-Start:'  entry: please add even if empty.
insserv: missing `Default-Stop:'   entry: please add even if empty.
insserv: Default-Start undefined, assuming empty start runlevel(s) for script `mn'
insserv: Default-Stop  undefined, assuming empty stop  runlevel(s) for script `mn'

有什么想法吗?

最佳答案

最后,最好的方法是制作一个极其简单的 bash 脚本来运行以下命令:

#!/bin/bash
start-stop-daemon --start --background -m --oknodo --pidfile /home/pi/pid/MonoDaemon.pid --exec /usr/bin/mono -- /home/pi/Mono/EDM.exe

之后我在/etc/init.d/rc.local 中添加了一行

/bin/bash /etc/init.d/mnw

关于linux - 在启动时运行单声道应用程序而不创建服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22326163/

相关文章:

c++ - sizeof 在编译不同的程序时为结构返回不同的值

php - 在 Eclipse 中使用 XDebug 远程调试时,PHP 源文件是否需要在本地和远程存在?

java - 尝试在 Linux debian crunchbang 上安装 android studio 时缺少 tools.jar

c - Linux 帧缓冲区低效的帧抓取

linux - 如何删除基于列值的重复行?

.net - 在尝试 Windows 的 mono-4.2.2 时不断出现 Exec 格式错误

mono - 有没有使用 Mono 编译 C# 代码以便 exe 可以在 Google 的 native 客户端支持下运行的示例?

c# - CompiledCode.Execute 在第一次迭代期间需要很长时间

linux - 如何根据键盘事件在终端模式下自动启动脚本?

linux -/proc/iomem 显示的 "System RAM"是不是像未分配的内存?