我刚刚从.NET开发转移到LINUX MONO发展......我不要有Linux开发更早的体验..
我有一个要求在单声道C#创建一个后台服务(如Windows服务)..是有可能..
而且是有可能从单C#访问Linux原生API。 (如WINAPI从胜C#调用)..
我刚刚从.NET开发转移到LINUX MONO发展......我不要有Linux开发更早的体验..
我有一个要求在单声道C#创建一个后台服务(如Windows服务)..是有可能..
而且是有可能从单C#访问Linux原生API。 (如WINAPI从胜C#调用)..
单附带了一个Windows服务兼容的系统,称为单服务。
只要使用的P / Invoke就像你通常会。 您还可以检查出像女妖其他一些简单的基于单项目的源代码,看看他们是如何做到在Linux P /调用。 只要搜索上google.com/codesearch女妖。
我使用的脚本,这样我就可以捕捉到退出代码,并用它来执行自动更新和东西。 它也重新启动本身,如果它崩溃,和电子邮件,你当它与日志文件的最后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发行版),写一些额外的脚本启动,停止,重新启动它,等等。
至于Linux操作系统(Unix的API),可以使用Mono.UNIX库附带单。 虽然作为一般规则,你应该尽量坚持用便携式解决方案,而不是像Mono.UNix或P的东西/调用只要有可能。