Przeglądaj źródła

[feat] restart xray-core from cli #3825

Alireza Ahmadi 2 dni temu
rodzic
commit
2b1d3e7347
7 zmienionych plików z 62 dodań i 26 usunięć
  1. 7 1
      main.go
  2. 4 0
      web/web.go
  3. 5 0
      x-ui.rc
  4. 1 0
      x-ui.service.arch
  5. 1 0
      x-ui.service.debian
  6. 1 0
      x-ui.service.rhel
  7. 43 25
      x-ui.sh

+ 7 - 1
main.go

@@ -70,7 +70,7 @@ func runWebServer() {
 
 
 	sigCh := make(chan os.Signal, 1)
 	sigCh := make(chan os.Signal, 1)
 	// Trap shutdown signals
 	// Trap shutdown signals
-	signal.Notify(sigCh, syscall.SIGHUP, syscall.SIGTERM)
+	signal.Notify(sigCh, syscall.SIGHUP, syscall.SIGTERM, syscall.SIGUSR1)
 	for {
 	for {
 		sig := <-sigCh
 		sig := <-sigCh
 
 
@@ -108,6 +108,12 @@ func runWebServer() {
 				return
 				return
 			}
 			}
 			log.Println("Sub server restarted successfully.")
 			log.Println("Sub server restarted successfully.")
+		case syscall.SIGUSR1:
+			logger.Info("Received USR1 signal, restarting xray-core...")
+			err := server.RestartXray()
+			if err != nil {
+				logger.Error("Failed to restart xray-core:", err)
+			}
 
 
 		default:
 		default:
 			// --- FIX FOR TELEGRAM BOT CONFLICT (409) on full shutdown ---
 			// --- FIX FOR TELEGRAM BOT CONFLICT (409) on full shutdown ---

+ 4 - 0
web/web.go

@@ -490,3 +490,7 @@ func (s *Server) GetCron() *cron.Cron {
 func (s *Server) GetWSHub() any {
 func (s *Server) GetWSHub() any {
 	return s.wsHub
 	return s.wsHub
 }
 }
+
+func (s *Server) RestartXray() error {
+	return s.xrayService.RestartXray(true)
+}

+ 5 - 0
x-ui.rc

@@ -10,4 +10,9 @@ depend() {
 }
 }
 start_pre(){
 start_pre(){
     cd /usr/local/x-ui
     cd /usr/local/x-ui
+}
+reload() {
+  ebegin "Reloading ${RC_SVCNAME}"
+  kill -USR1  $pidfile
+  eend $?
 }
 }

+ 1 - 0
x-ui.service.arch

@@ -9,6 +9,7 @@ Environment="XRAY_VMESS_AEAD_FORCED=false"
 Type=simple
 Type=simple
 WorkingDirectory=/usr/lib/x-ui/
 WorkingDirectory=/usr/lib/x-ui/
 ExecStart=/usr/lib/x-ui/x-ui
 ExecStart=/usr/lib/x-ui/x-ui
+ExecReload=kill -USR1 $MAINPID
 Restart=on-failure
 Restart=on-failure
 RestartSec=5s
 RestartSec=5s
 
 

+ 1 - 0
x-ui.service.debian

@@ -9,6 +9,7 @@ Environment="XRAY_VMESS_AEAD_FORCED=false"
 Type=simple
 Type=simple
 WorkingDirectory=/usr/local/x-ui/
 WorkingDirectory=/usr/local/x-ui/
 ExecStart=/usr/local/x-ui/x-ui
 ExecStart=/usr/local/x-ui/x-ui
+ExecReload=kill -USR1 $MAINPID
 Restart=on-failure
 Restart=on-failure
 RestartSec=5s
 RestartSec=5s
 
 

+ 1 - 0
x-ui.service.rhel

@@ -9,6 +9,7 @@ Environment="XRAY_VMESS_AEAD_FORCED=false"
 Type=simple
 Type=simple
 WorkingDirectory=/usr/local/x-ui/
 WorkingDirectory=/usr/local/x-ui/
 ExecStart=/usr/local/x-ui/x-ui
 ExecStart=/usr/local/x-ui/x-ui
+ExecReload=kill -USR1 $MAINPID
 Restart=on-failure
 Restart=on-failure
 RestartSec=5s
 RestartSec=5s
 
 

+ 43 - 25
x-ui.sh

@@ -408,6 +408,16 @@ restart() {
     fi
     fi
 }
 }
 
 
+restart_xray() {
+    systemctl reload x-ui
+    LOGI "xray-core Restart signal sent successfully, Please check the log information to confirm whether xray restarted successfully"
+    sleep 2
+    show_xray_status
+    if [[ $# == 0 ]]; then
+        before_show_menu
+    fi
+}
+
 status() {
 status() {
     if [[ $release == "alpine" ]]; then
     if [[ $release == "alpine" ]]; then
         rc-service x-ui status
         rc-service x-ui status
@@ -2154,6 +2164,7 @@ show_usage() {
 │  ${blue}x-ui start${plain}                 - Start                            │
 │  ${blue}x-ui start${plain}                 - Start                            │
 │  ${blue}x-ui stop${plain}                  - Stop                             │
 │  ${blue}x-ui stop${plain}                  - Stop                             │
 │  ${blue}x-ui restart${plain}               - Restart                          │
 │  ${blue}x-ui restart${plain}               - Restart                          │
+|  ${blue}x-ui restart-xray${plain}          - Restart Xray                     │
 │  ${blue}x-ui status${plain}                - Current Status                   │
 │  ${blue}x-ui status${plain}                - Current Status                   │
 │  ${blue}x-ui settings${plain}              - Current Settings                 │
 │  ${blue}x-ui settings${plain}              - Current Settings                 │
 │  ${blue}x-ui enable${plain}                - Enable Autostart on OS Startup   │
 │  ${blue}x-ui enable${plain}                - Enable Autostart on OS Startup   │
@@ -2189,25 +2200,26 @@ show_menu() {
 │  ${green}11.${plain} Start                                     │
 │  ${green}11.${plain} Start                                     │
 │  ${green}12.${plain} Stop                                      │
 │  ${green}12.${plain} Stop                                      │
 │  ${green}13.${plain} Restart                                   │
 │  ${green}13.${plain} Restart                                   │
-│  ${green}14.${plain} Check Status                              │
-│  ${green}15.${plain} Logs Management                           │
+|  ${green}14.${plain} Restart Xray                              │
+│  ${green}15.${plain} Check Status                              │
+│  ${green}16.${plain} Logs Management                           │
 │────────────────────────────────────────────────│
 │────────────────────────────────────────────────│
-│  ${green}16.${plain} Enable Autostart                          │
-│  ${green}17.${plain} Disable Autostart                         │
+│  ${green}17.${plain} Enable Autostart                          │
+│  ${green}18.${plain} Disable Autostart                         │
 │────────────────────────────────────────────────│
 │────────────────────────────────────────────────│
-│  ${green}18.${plain} SSL Certificate Management                │
-│  ${green}19.${plain} Cloudflare SSL Certificate                │
-│  ${green}20.${plain} IP Limit Management                       │
-│  ${green}21.${plain} Firewall Management                       │
-│  ${green}22.${plain} SSH Port Forwarding Management            │
+│  ${green}19.${plain} SSL Certificate Management                │
+│  ${green}20.${plain} Cloudflare SSL Certificate                │
+│  ${green}21.${plain} IP Limit Management                       │
+│  ${green}22.${plain} Firewall Management                       │
+│  ${green}23.${plain} SSH Port Forwarding Management            │
 │────────────────────────────────────────────────│
 │────────────────────────────────────────────────│
-│  ${green}23.${plain} Enable BBR                                │
-│  ${green}24.${plain} Update Geo Files                          │
-│  ${green}25.${plain} Speedtest by Ookla                        │
+│  ${green}24.${plain} Enable BBR                                │
+│  ${green}25.${plain} Update Geo Files                          │
+│  ${green}26.${plain} Speedtest by Ookla                        │
 ╚────────────────────────────────────────────────╝
 ╚────────────────────────────────────────────────╝
 "
 "
     show_status
     show_status
-    echo && read -rp "Please enter your selection [0-25]: " num
+    echo && read -rp "Please enter your selection [0-26]: " num
 
 
     case "${num}" in
     case "${num}" in
     0)
     0)
@@ -2253,43 +2265,46 @@ show_menu() {
         check_install && restart
         check_install && restart
         ;;
         ;;
     14)
     14)
-        check_install && status
+        check_install && restart_xray
         ;;
         ;;
     15)
     15)
-        check_install && show_log
+        check_install && status
         ;;
         ;;
     16)
     16)
-        check_install && enable
+        check_install && show_log
         ;;
         ;;
     17)
     17)
-        check_install && disable
+        check_install && enable
         ;;
         ;;
     18)
     18)
-        ssl_cert_issue_main
+        check_install && disable
         ;;
         ;;
     19)
     19)
-        ssl_cert_issue_CF
+        ssl_cert_issue_main
         ;;
         ;;
     20)
     20)
-        iplimit_main
+        ssl_cert_issue_CF
         ;;
         ;;
     21)
     21)
-        firewall_menu
+        iplimit_main
         ;;
         ;;
     22)
     22)
-        SSH_port_forwarding
+        firewall_menu
         ;;
         ;;
     23)
     23)
-        bbr_menu
+        SSH_port_forwarding
         ;;
         ;;
     24)
     24)
-        update_geo
+        bbr_menu
         ;;
         ;;
     25)
     25)
+        update_geo
+        ;;
+    26)
         run_speedtest
         run_speedtest
         ;;
         ;;
     *)
     *)
-        LOGE "Please enter the correct number [0-25]"
+        LOGE "Please enter the correct number [0-26]"
         ;;
         ;;
     esac
     esac
 }
 }
@@ -2305,6 +2320,9 @@ if [[ $# > 0 ]]; then
     "restart")
     "restart")
         check_install 0 && restart 0
         check_install 0 && restart 0
         ;;
         ;;
+    "restart-xray")
+        check_install 0 && restart_xray 0
+        ;;
     "status")
     "status")
         check_install 0 && status 0
         check_install 0 && status 0
         ;;
         ;;