c# - 使用 MONO 在 LINUX 中开发类似于 Windows 的服务?

标签 c# linux mono service

我刚从 .net 开发转到 LINUX MONO 开发...我之前没有太多 linux 开发经验..

  1. 我需要在 mono c# 中创建一个后台服务(如 Windows 服务)..这可能吗..

  2. 是否可以从 mono c# 访问 LINUX native API。 (比如来自 win c# 的 winAPI 调用)..

最佳答案

我使用脚本,所以我可以捕获退出代码并使用它来执行自动更新和其他操作。如果崩溃,它还会自行重启,并在重启时通过日志文件的最后 x 行向您发送电子邮件。

/etc/init.d/MyMonoApp

#!/bin/sh
#/etc/init.d/MyMonoApp
#

APP_NAME="MyMonoApp"
APP_PATH="/home/mono/MyMonoApp"

APP_USER=mono

case "$1" in
  start)


        echo "Starting $APP_NAME"

        start-stop-daemon --start \
                          --background \
                          --make-pidfile \
                          --pidfile /var/run/$APP_NAME.pid \
                          --chuid $APP_USER \
                          --exec "$APP_PATH/$APP_NAME"
    ;;
  stop)

        echo "Stopping $APP_NAME"
                start-stop-daemon -o  --stop \
                --pidfile /var/run/$APP_NAME.pid

    ;;
  *)
    echo "Usage: /etc/init.d/$APP_NAME {start|stop}"
    exit 1
    ;;
esac

exit 0

/home/mono/MyMonoApp

#!/bin/sh
#!/home/mono/MyMonoApp

APP_NAME=`basename $0`
APP_DIR=`dirname $0`
HOSTNAME=`hostname`

cd $APP_DIR

tail --lines=300 output.log  | mail -s "MyMonoApp $HOSTNAME:$APP_NAME STARTED" "me@email.com"

exitcode=0
until [ $exitcode -eq 9 ]
do
        startdate="$(date +%s)"
        /usr/local/bin/mono MyMonoApp.exe $HOSTNAME:$APP_NAME > output.log
        exitcode=$?
        enddate="$(date +%s)"

        echo "EXIT CODE = $exitcode" >> output.log

        cp -f output.log output.log.1
        elapsed_seconds="$(expr $enddate - $startdate)"
        echo "Elapsed seconds $elapsed_seconds"


        subject="EXIT CODE: $exitcode"
        echo "BASH: Exit Code = $exitcode"

        if [ $exitcode -eq 6 ] #Restart
        then
          subject="RESTART"
        elif [ $exitcode -eq 7 ] #Previous version
        then
          subject="PREVIOUS VERSION"
          cp -fv MyMonoApp.exe_previous MyMonoApp.exe
        elif [ $exitcode -eq 8 ] #Update
        then
          subject="SOFTWARE UPDATE"
          cp -fv MyMonoApp.exe MyMonoApp.exe_previous
          mv -fv MyMonoApp.exe_new MyMonoApp.exe
        elif [ $exitcode -eq 9 ] #Shutdown
        then
          subject="SHUTDOWN"
        fi


        if [ $elapsed_seconds -ge 10 ]  #been running for longer than 10 seconds
        then
                tail --lines=300 output.log  | mail -s "MyMonoApp $HOSTNAME:$APP_NAME $subject" "me@email.com"
                sleep 1  # tiny delay to let things settle
        else
                sleep 5  # delay to protect against eating the CPU resourses
        fi


done

注意:如果您使用 init.d 脚本关闭应用程序,它会终止进程,而不是发出信号让其彻底关闭。

关于c# - 使用 MONO 在 LINUX 中开发类似于 Windows 的服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1221110/

相关文章:

c# - 如何确定两组纬度/经度坐标之间的距离?

c# - 使用 SendGrid 安排邮件

c# - 如何创建 DbParameter 列表?

c# - Xamarin 中的 ListView 错误

c# - 对 DataGridView 中的选定行进行排序

php - Apache 内存问题

linux - Makefile如何指定程序参数

linux - Linux bash 中波浪号的含义(不是主目录)

c# - 使用 C#/Mono 的 Iphone 应用程序

c# - 使用 MonoMac 创建一个简单的 NSOutlineView 数据源