start-stop-status 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. #!/bin/sh
  2. sError="ERROR: "
  3. [ ! -z "$SYNOPKG_PKGNAME" ] && sError="<br />${sError}"
  4. TIMEOUT=120
  5. PACKAGE_NAME="RustDesk Server"
  6. PACKAGE_BASE="/var/packages/${PACKAGE_NAME}/target"
  7. HBBR_BIN="${PACKAGE_BASE}/bin/hbbr"
  8. HBBR_PORT=`synogetkeyvalue "${PACKAGE_BASE}/config/hbbr.conf" port`
  9. HBBR_LOG="${PACKAGE_BASE}/logs/hbbr.log"
  10. HBBS_BIN="${PACKAGE_BASE}/bin/hbbs"
  11. HBBS_PORT=`synogetkeyvalue "${PACKAGE_BASE}/config/hbbs.conf" port`
  12. HBBS_LOG="${PACKAGE_BASE}/logs/hbbs.log"
  13. PACKAGE_ENABLED="/var/packages/${PACKAGE_NAME}/enabled"
  14. PS_CMD="/bin/ps -w"
  15. DSM_MAJORVERSION=`synogetkeyvalue /etc.defaults/VERSION majorversion`
  16. if [[ $DSM_MAJORVERSION -gt 5 ]]; then
  17. PS_CMD="$PS_CMD -x"
  18. fi
  19. CheckIfDaemonAlive() {
  20. local PID="$1"
  21. PROCESS_ALIVE="0"
  22. [ -z "$PID" ] && return 1
  23. kill -0 "$PID"
  24. [ "0" == "$?" ] && PROCESS_ALIVE="1"
  25. }
  26. running_hbbr() {
  27. local PID=$(${PS_CMD} | sed -e 's/^[ \t]*//' | grep -v grep | grep hbbr | grep "${PACKAGE_NAME}" | head -n1 | cut -f1 -d' ')
  28. CheckIfDaemonAlive $PID
  29. [ "0" == "$PROCESS_ALIVE" ] && return 1
  30. return 0
  31. }
  32. running_hbbs() {
  33. local PID=$(${PS_CMD} | sed -e 's/^[ \t]*//' | grep -v grep | grep hbbs | grep "${PACKAGE_NAME}" | head -n1 | cut -f1 -d' ')
  34. CheckIfDaemonAlive $PID
  35. [ "0" == "$PROCESS_ALIVE" ] && return 1
  36. return 0
  37. }
  38. start() {
  39. [ "$SYNOPKG_TEMP_LOGFILE" == "" ] && SYNOPKG_TEMP_LOGFILE="/var/log/rustdeskserver.start.log"
  40. LANG=C cd "$PACKAGE_BASE" && (nohup "$HBBR_BIN" -p $HBBR_PORT > "$HBBR_LOG" 2>&1 &) && (nohup "$HBBS_BIN" -r 127.0.0.1 -p $HBBS_PORT > "$HBBS_LOG" 2>&1 &)
  41. i=0
  42. while true; do
  43. if ! running_hbbr || ! running_hbbs ; then
  44. # echo "WAIT: ${i}s of ${TIMEOUT}s"
  45. sleep 5s
  46. i=$((i+5))
  47. else
  48. break
  49. fi
  50. [ $i -ge $TIMEOUT ] && break
  51. done
  52. # 检查hbbr进程状态
  53. if ! running_hbbr ; then
  54. echo -e "${sError}hbbr进程已死" | tee -a $SYNOPKG_TEMP_LOGFILE
  55. stop
  56. return 1
  57. fi
  58. # 检查hbbs进程状态
  59. if ! running_hbbs ; then
  60. echo -e "${sError}hbbs进程已死" | tee -a $SYNOPKG_TEMP_LOGFILE
  61. stop
  62. return 1
  63. fi
  64. return 0
  65. }
  66. stop() {
  67. [ "$SYNOPKG_TEMP_LOGFILE" == "" ] && SYNOPKG_TEMP_LOGFILE="/var/log/rustdeskserver.stop.log"
  68. # 检查hbbr进程状态
  69. if running_hbbr ; then
  70. local PID=$(${PS_CMD} | sed -e 's/^[ \t]*//' | grep -v grep | grep hbbr | grep "${PACKAGE_NAME}" | head -n1 | cut -f1 -d' ')
  71. [ -z "$PID" ] && return 0
  72. kill -15 $PID
  73. sleep 5s
  74. # 检查hbbr进程状态
  75. if running_hbbr ; then
  76. kill -9 $PID
  77. sleep 5s
  78. if running_hbbr ; then
  79. echo "${sError}无法关闭hbbr进程 (pid=$PID)!" | tee -a $SYNOPKG_TEMP_LOGFILE
  80. return 1
  81. fi
  82. fi
  83. fi
  84. # 检查hbbs进程状态
  85. if running_hbbs ; then
  86. local PID=$(${PS_CMD} | sed -e 's/^[ \t]*//' | grep -v grep | grep hbbs | grep "${PACKAGE_NAME}" | head -n1 | cut -f1 -d' ')
  87. [ -z "$PID" ] && return 0
  88. kill -15 $PID
  89. sleep 5s
  90. # 检查hbbs进程状态
  91. if running_hbbs ; then
  92. kill -9 $PID
  93. sleep 5s
  94. if running_hbbs ; then
  95. echo "${sError}无法关闭hbbs进程 (pid=$PID)!" | tee -a $SYNOPKG_TEMP_LOGFILE
  96. return 1
  97. fi
  98. fi
  99. fi
  100. return 0
  101. }
  102. case $1 in
  103. start)
  104. # 启动服务器
  105. start
  106. exit $?
  107. ;;
  108. stop)
  109. # 关闭服务器
  110. stop
  111. exit $?
  112. ;;
  113. status)
  114. # 检查套件开关
  115. if [ ! -f "${PACKAGE_ENABLED}" ]; then
  116. echo "${sError}套件没有开启" | tee -a $SYNOPKG_TEMP_LOGFILE
  117. exit 0
  118. fi
  119. # 检查hbbr进程状态
  120. if ! running_hbbr ; then
  121. echo "${sError}hbbr进程已死" | tee -a $SYNOPKG_TEMP_LOGFILE
  122. exit 1
  123. fi
  124. # 检查hbbs进程状态
  125. if ! running_hbbs ; then
  126. echo "${sError}hbbs进程已死" | tee -a $SYNOPKG_TEMP_LOGFILE
  127. exit 1
  128. fi
  129. exit 0
  130. ;;
  131. log)
  132. echo "$PACKAGE_BASE/logs/server.log"
  133. exit 0
  134. ;;
  135. esac