2009-08-03 11 views
24

मैं सिर्फ लिनक्स मोनो विकास के लिए .net विकास से चले गए ... और मैं डॉन linux देव पहले से ज्यादा अनुभव ..विंडोज़ मोनो का उपयोग कर LINUX में सेवाओं के विकास की तरह विंडोज़?

  1. मैं (विंडोज़ सेवाओं की तरह) एक पृष्ठभूमि सेवा बनाने के लिए एक आवश्यकता है में मोनो सी # .. क्या यह संभव है ..

  2. और क्या मोनो सी # से LINUX देशी एपीआई तक पहुंचना संभव है। (जीत सी # से winAPI कॉल की तरह) ..

उत्तर

17
  1. मोनो जहाजों को एक विंडोज सेवा संगत प्रणाली के साथ मोनो-सेवा कहा जाता है।

    • सेवा के लिए यूनिक्स शब्द डेमन है। नियमित डेमॉन /etc/init.d/ में पाए जा सकते हैं और वे रनलेवल में स्थापित होते हैं जिन्हें वे /etc/rc.* निर्देशिकाओं से symlinked द्वारा चलाया जाता है।
  2. बस सामान्य रूप से पी/चाल का उपयोग करें। आप कुछ अन्य साधारण मोनो-आधारित परियोजनाओं के स्रोत कोड को भी देख सकते हैं जैसे बांसी यह देखने के लिए कि वे लिनक्स पर पी/इनवॉक्स कैसे करते हैं। Google.com/codesearch पर बस बंशी की तलाश करें।

+0

धन्यवाद आपके उत्तर के लिए एडी .. ठीक है मैं कुछ नमूने के साथ कोशिश करूंगा .. – RameshVel

+0

लिंक पुराना है, कृपया इसे अपडेट करें: § –

4

के लिए 1. - हाँ मोनो सी # में पृष्ठभूमि सेवा बनाना संभव है। सेवा वास्तव में एक प्रोग्राम है जो पृष्ठभूमि में चलता है कीबोर्ड और माउस से कोई इनपुट नहीं लेता है, और सीधे उपयोगकर्ता की स्क्रीन पर आउटपुट नहीं करता है। इस तरह के प्रोग्राम बनाने के बाद आप इसे पृष्ठभूमि में काम करने के लिए सेट करने के लिए इसे हूप ./programname & के साथ चला सकते हैं और हैंगअप सिग्नल को अनदेखा कर सकते हैं (जो आपके लॉग आउट होने पर आपकी चल रही प्रक्रियाओं को भेजा जाता है)।

यदि आप इसे बेहतर एकीकृत करना चाहते हैं, तो आपको इसे रोकने, शुरू करने, पुनरारंभ करने आदि के लिए कुछ अतिरिक्त स्क्रिप्ट लिखनी होंगी (आपके चुने हुए लिनक्स वितरण के आधार पर)।

+0

धन्यवाद सीनाद उका, आपका मतलब है, यह कोई सामान्य विंडोलेस कंसोल ऐप होगा, और LINUX कमांड का उपयोग करके पृष्ठभूमि में चलाने के लिए सेट किया जाएगा .. – RameshVel

2

के रूप में लिनक्स (यूनिक्स एपीआई) के लिए, आप Mono.UNIX library कि मोनो के साथ शामिल है का उपयोग कर सकते हैं। हालांकि एक सामान्य नियम के रूप में आपको Mono.UNix या पी/जब भी संभव हो, जैसे सामानों की बजाय पोर्टेबल समाधानों के साथ चिपकने का प्रयास करना चाहिए।

23

मैं स्क्रिप्ट का उपयोग करता हूं, इसलिए मैं निकास कोड को कैप्चर कर सकता हूं और स्वचालित अपडेट और चीजों को करने के लिए इसका उपयोग कर सकता हूं। यह क्रैश होने पर भी पुनः प्रारंभ होता है, और लॉग फ़ाइल की अंतिम एक्स लाइनों के साथ पुनरारंभ होने पर आपको ई-मेल करता है।

/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" "[email protected]" 

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" "[email protected]" 
       sleep 1 # tiny delay to let things settle 
     else 
       sleep 5 # delay to protect against eating the CPU resourses 
     fi 


done 

नोट: यदि आप init.d स्क्रिप्ट का उपयोग कर ऐप्लिकेशन बंद हैं, तो यह मार देंगे प्रक्रिया को साफ करने के लिए इसे सिग्नल करने के बजाय।

+0

बहुत बढ़िया, बस मुझे जो चाहिए! आपका बहुत बहुत धन्यवाद! – VirusX

+0

@FlappySocks स्क्रिप्ट काम करता है सिवाय इसके कि जब मैं init.d स्क्रिप्ट का उपयोग कर सेवा को रोकता हूं तो यह स्क्रिप्ट को रोकता है लेकिन यह मोनो प्रक्रिया को रोकता नहीं है। कुछ पता है इसे कैसे सुधारना? – ColmanJ

संबंधित मुद्दे