Linux autossh + ssh 设置 sockets5 代理翻墙
Linux - LSBInitScript

系统服务脚本 /etc/init.d/autossh-proxy:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#!/bin/sh

### BEGIN INIT INFO
# Provides: autossh-proxy
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start and stop autossh-proxy
# Description: autossh-proxy is a manager of socket5 proxy by ssh
### END INIT INFO

# Author: lizs <lizsmail.com>

PATH=/sbin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

NAME=autossh
AUTOSSH=/usr/bin/autossh
AUTOSSH_PIDFILE=/var/run/$NAME.pid
# AUTOSSH_LOGFILE=/var/log/$BASE.log
# autossh can use environment variables to control features, e.g. AUTOSSH_PID.
# more info see `man autossh`
AUTOSSH_PID="/usr/bin/env AUTOSSH_PIDFILE=${AUTOSSH_PIDFILE}"
# The autossh args
AUTOSSH_ARGS="-M 0 -fqTN -D 1080 root@alizs.cc"

# Get lsb functions
. /lib/lsb/init-functions

do_start()
{
start-stop-daemon --start --quiet --oknodo \
--pidfile $AUTOSSH_PIDFILE \
--make-pidfile \
--exec $AUTOSSH_PID $AUTOSSH \
-- $AUTOSSH_ARGS
RETVAL="$?"
return "${RETVAL}"
}

do_stop()
{
# Return
# 0 if the daemon has been stopped
# 2 if the daemon could not be stopped
# other if a failure occured
start-stop-daemon --stop --quiet --oknodo \
--retry=TERM/5/KILL/5 \
--pidfile $AUTOSSH_PIDFILE \
--remove-pidfile
RETVAL="$?"
return "${RETVAL}"
}

do_restart()
{
exit 0
}


case "$1" in
status)
if init_is_upstart; then
exit 1
fi
status_of_proc -p "${AUTOSSH_PIDFILE}" "${AUTOSSH}" "${NAME}"
;;
start)
if init_is_upstart; then
exit 1
fi
log_begin_msg "Starting ${NAME}..."
do_start
log_end_msg "$?" # e.g. [ok], failed!, (warning)
;;
stop)
if init_is_upstart; then
exit 1
fi
log_begin_msg "Stopping ${NAME}..."
do_stop
log_end_msg "$?"
;;
restart)
if init_is_upstart; then
exit 1
fi
log_begin_msg "Restarting ${NAME}"
do_restart
log_end_msg "$?"
;;
force-reload)
exit 0
;;
*)
log_failure_msg "Usage: service ${NAME} {status|start|stop|restart}"
;;
esac

添加系统服务

将服务脚本添加到 /etc/init.d/ 目录下之后,就可以添加系统服务了。

  • CentOS
    Redhat 提供了 chkconfig 命令来管理系统的服务:

    • chkconfig --list:所有服务列表
    • chkconfig --list serviceName:只显示 serverName 服务
    • chkconfig serviceName on:开启 serverName 服务的自动启动
    • chkconfig serviceName off:关闭 serverName 服务的自动启动
    • chkconfig --add serviceName:添加服务
    • chkconfig --del serviceName:删除服务
  • Ubuntu
    Ubuntu 是没有 chkconfig 命令的,而是提供了另外的命令来实现管理服务:

    • sudo update-rc.d serviceName defaults:添加服务,默认添加服务为自动启动,即 /etc/rc0.d//etc/rc6.d 各级别里面都添加了服务的启动软链接。
    • sudo update-rc.d serviceName remove:删除服务,默认会删除所有级别的服务,即彻底删除服务。

      如果,你想要配置各级别的启动情况,可以删除相应级别目录里面的服务软链接。

    • systemctl daemon-reload:修改过服务之后,用该命令来重新加载服务。