start-stop-status 4.2 KB

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