start-stop-status 4.3 KB

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