簡體   English   中英

Windows使用MONO在LINUX中進行服務開發?

[英]Windows like services development in LINUX using MONO?

我剛從.net開發轉移到LINUX MONO開發......我以前對linux開發人員有很多經驗..

  1. 我要求在單聲道c#中創建后台服務(如Windows服務)..是否可能..

  2. 是否可以從單聲道c#訪問LINUX本機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

/家庭/單聲道/ 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腳本關閉應用程序,它將終止進程,而不是發出信號干凈關閉。

  1. Mono附帶一個名為mono-service的Windows Service兼容系統。

    • 用於服務的Unix字是守護進程。 常規守護進程可以在/etc/init.d/中找到,並通過從/etc/rc.*目錄中進行符號鏈接安裝到它們應該運行的運行級別中。
  2. 只需像往常一樣使用p / invoke。 您還可以查看其他一些基於單聲道的簡單項目(如Banshee)的源代碼,了解它們在Linux上的調用方式。 只需在google.com/codesearch上搜索banshee即可。

對於1. - 是的,可以在單聲道c#中創建后台服務。 服務實際上是在后台運行的程序不需要鍵盤和鼠標的輸入,也不會直接輸出到用戶的屏幕。 創建此類程序后,您可以使用nohup ./programname運行它並將其設置為后台工作並忽略掛斷信號(當您注銷時發送到正在運行的進程)。

如果你想更好地集成它,那么你必須編寫一些額外的腳本來停止,啟動,重新啟動它等(取決於你選擇的linux發行版)。

對於LINUX(Unix api),您可以使用mono附帶的Mono.UNIX庫 雖然作為一般規則,你應該盡可能堅持使用便攜式解決方案而不是像Mono.UNix或​​p / invoke這樣的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM