Windows使用MONO的LINUX服务开发?
我刚刚从.net开发移植到LINUX MONO开发中...并且我以前没有太多关于linux dev的经验..
我有一个需要创建一个后台服务(如Windows服务)在单声道C#..是否有可能..
是否有可能从mono c#访问LINUX本地API。 (比如来自win c#的winAPI调用)。
Mono附带称为单声道服务的Windows服务兼容系统。
只需像通常那样使用p / invoke即可。 您还可以查看其他一些简单的基于mono的项目(如Banshee)的源代码,以查看它们如何在Linux上执行p / invokes。 只需在google.com/codesearch上搜索banshee即可。
我使用脚本,因此我可以捕获退出代码并使用它来执行自动更新和事情。 如果它崩溃,它也会自动重新启动,并在用日志文件的最后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 - 是的,它可以在单声道c#中创建后台服务。 服务实际上是一个在后台运行的程序,不需要键盘和鼠标的输入,也不会直接输出到用户的屏幕。 创建这样的程序后,您可以使用nohup ./programname运行它并将其设置为后台并忽略挂起信号(在注销时发送到正在运行的进程)。
如果你想更好地集成它,那么你必须编写一些额外的脚本来停止,启动,重启等等(取决于你选择的linux发行版)。
链接地址: http://www.djcxy.com/p/90023.html