cns_xbl/xray/xray.init
2025-06-22 01:46:54 +08:00

142 lines
3.8 KiB
Bash

#!/bin/sh
#chkconfig: 2345 99 99
### BEGIN INIT INFO
# Provides: xray
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start xray daemon at boot time
# Description: Start xray daemon at boot time
### END INIT INFO
START=99
EXTRA_COMMANDS="status"
usage()
{
if type systemctl && [ -z "$(systemctl --failed|grep -q 'Host is down')" ]; then
us="systemctl [start|stop|status|restart] xray.service"
else
if [ "$0" = '/etc/rc.common' ]; then
us="/etc/init.d/xray [start|stop|status|restart]"\
else
us="$0 [start|stop|status|restart]"
fi
fi &>/dev/null
echo "Usage:
$us
Config file is [xray_install_directory]/xray.json"
} 2>/dev/null
status()
{
grep -q xray /proc/`cat [xray_install_directory]/run.pid`/comm && \
echo "xray is running..." || \
echo "xray is stopped..."
} 2>/dev/null
start()
{
status | grep "xray is running..." && return 0
echo -n "Starting xray:"
echo 3 >/proc/sys/net/ipv4/tcp_fastopen
ulimit -n 1048576
cd "[xray_install_directory]"
(while :; do
./xray run -config xray.json &
echo $! >[xray_install_directory]/run.pid
sleep 3
while grep -q xray /proc/`cat [xray_install_directory]/run.pid`/comm; do
sleep 3
done
done >/dev/null &
echo $! >[xray_install_directory]/drun.pid)
count=0
while [ ! -f "[xray_install_directory]/run.pid" ] && [ "$count" -le 5 ]; do
sleep 1
count=$((count + 1))
done
sleep 1
for server_port in [xray_tcp_port_list]; do
iptables -I INPUT -p 6 --dport $server_port -j ACCEPT
ip6tables -I INPUT -p 6 --dport $server_port -j ACCEPT
done
for server_port in [xray_udp_port_list]; do
iptables -I INPUT -p 17 --dport $server_port -j ACCEPT
ip6tables -I INPUT -p 17 --dport $server_port -j ACCEPT
done
grep -q xray /proc/`cat [xray_install_directory]/run.pid`/comm && \
echo -e "\033[60G[\033[32m OK \033[0m]" || \
echo -e "\033[60G[\033[31mFAILED\033[0m]"
} 2>/dev/null
stop()
{
for server_port in [xray_tcp_port_list]; do
while iptables -S INPUT | grep -qE "\-\-dport $server_port \-j ACCEPT"; do
iptables -D INPUT -p 6 --dport $server_port -j ACCEPT
done
while ip6tables -S INPUT | grep -qE "\-\-dport $server_port \-j ACCEPT"; do
ip6tables -D INPUT -p 6 --dport $server_port -j ACCEPT
done
done
for server_port in [xray_udp_port_list]; do
while iptables -S INPUT | grep -qE "\-\-dport $server_port \-j ACCEPT"; do
iptables -D INPUT -p 17 --dport $server_port -j ACCEPT
done
while ip6tables -S INPUT | grep -qE "\-\-dport $server_port \-j ACCEPT"; do
ip6tables -D INPUT -p 17 --dport $server_port -j ACCEPT
done
done
status | grep "xray is stopped..." && return 0
echo -n "Stopping xray:"
kill -9 `cat [xray_install_directory]/drun.pid`
kill -9 `cat [xray_install_directory]/run.pid`
sleep 1
grep -q xray /proc/`cat [xray_install_directory]/run.pid`/comm && \
echo -e "\033[60G[\033[31mFAILED\033[0m]" || \
echo -e "\033[60G[\033[32m OK \033[0m]"
} 2>/dev/null
restart()
{
stop
start
} 2>/dev/null
systemdStart()
{
status | grep running && return 0
cd "[xray_install_directory]"
for server_port in [xray_tcp_port_list]; do
iptables -I INPUT -p 6 --dport $server_port -j ACCEPT
ip6tables -I INPUT -p 6 --dport $server_port -j ACCEPT
done
for server_port in [xray_udp_port_list]; do
iptables -I INPUT -p 17 --dport $server_port -j ACCEPT
ip6tables -I INPUT -p 17 --dport $server_port -j ACCEPT
done
ulimit -n 1048576
cd "[xray_install_directory]"
(while :; do
./xray run -config xray.json &
echo $! >[xray_install_directory]/run.pid
sleep 3
while grep -q xray /proc/`cat [xray_install_directory]/run.pid`/comm; do
sleep 3
done
done >/dev/null &
echo $! >[xray_install_directory]/drun.pid)
} 2>/dev/null
systemdRestart()
{
stop
systemdStart
} 2>/dev/null
if [ -z "$initscript" ]; then
${1:-usage}
fi