Tôi sử dụng tập lệnh, vì vậy tôi có thể nắm bắt mã thoát và sử dụng nó để thực hiện cập nhật tự động và mọi thứ. Nó cũng tự khởi động lại nếu nó bị treo và gửi e-mail cho bạn khi nó khởi động lại với các dòng x cuối cùng của tệp nhật ký.
/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" "[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
Lưu ý: nếu bạn đóng ứng dụng bằng cách sử dụng kịch bản init.d, nó sẽ giết chết quá trình, chứ không phải là tín hiệu để đóng sạch.
cảm ơn eddie cho câu trả lời của bạn .. okie Tôi sẽ thử một số mẫu .. – RameshVel
Liên kết đã lỗi thời, vui lòng cập nhật: Ь –