# 第二章
# 免密ssh/scp
- 客户机A,远程服务器B
- 在A执行命令:
ssh-keygen -t rsa - 将A生成的文件目录中的id_rsa.pub复制到B:
scp .ssh/id_rsa.pub root@ip:/root/.ssh/authorized_keys - A执行:
ssh-add id_rsa - 到此ssh、scp免密操作
# ssh
- 登陆B:
ssh root@ip
# scp
- 上传文件:scp A文件 root@ip:B目录/文件
- 上传文件夹:scp -r A文件 root@ip:B目录
- 下载文件:scp root@ip:B文件 A目录/文件
- 下载文件夹:scp -r root@ip:B文件 A目录/文件
# 自启动脚本
# 单jar
#!/bin/bash # 上面中的 #! 是一种约定标记, 它可以告诉系统这个脚本需要什么样的解释器来执行; APP_NAME=lu-manage.jar APP_LOG_NAME=xxx.log #使用说明,用来提示输入参数 usage() { echo "Usage: sh $APP_NAME.sh [start|stop|restart|status]" exit 1 } #检查程序是否在运行 is_exist() { pid=$(ps -aux | grep $APP_NAME | grep -v grep | grep -v deploy | awk '{print $2}') #如果不存在返回1,存在返回0 if [ -z "$pid" ]; then return 1 else return 0 fi } #启动方法 start() { is_exist if [ $? -eq 0 ]; then echo "$APP_NAME is already running. pid=$pid" else nohup java -jar $APP_NAME >> $APP_LOG_NAME 2>&1 & fi } #停止方法 stop() { echo "开始关闭java应用" is_exist if [ $? -eq "0" ]; then kill -9 $pid else echo "$APP_NAME is not running" fi } #输出运行状态 status() { is_exist if [ $? -eq "0" ]; then echo "$APP_NAME is running. Pid is $pid" else echo "$APP_NAME is NOT running." fi } #重启 restart() { stop sleep 5 start } #根据输入参数,选择执行对应方法,不输入则执行使用说明 case "$1" in "start") start ;; "stop") stop ;; "status") status ;; "restart") restart ;; *) usage ;; esac1
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
# 多jar本地
#!/bin/bash # 上面中的 #! 是一种约定标记, 它可以告诉系统这个脚本需要什么样的解释器来执行; USERNAME=zhanglu PROJECT_PATH=/Users/zhanglu/Desktop/lu/workspace/南京数脉动力信息技术有限公司/work_space/电信5楼项目组/5G消息/lu_work_space/RCS MVN=/Users/zhanglu/Library/Application\ Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/202.7660.26/IntelliJ\ IDEA.app/Contents/plugins/maven/lib/maven3/bin/mvn stop(){ pids=$(ps -au$USERNAME | grep $1 | grep -v grep | grep -v deploy | awk '{print $2}') for pid in ${pids[@]} do echo killed pid $pid kill -9 $pid done } start(){ jars=$(find $1 -name $2) echo jars cd $1 for jar in ${jars[@]} do if [[ $jar == *rcs-server* ]] then nohup java -jar $jar & echo start jar $jar sleep 8 elif [[ $jar == *rcs-config* ]] then nohup java -jar $jar & echo start jar $jar sleep 20 fi done for jar in ${jars[@]} do if [[ $jar != *rcs-server* && $jar != *rcs-config* ]] then nohup java -jar $jar & echo start jar $jar fi sleep 6 done } restart(){ read -p "请输入关闭rcs-jar进程匹配规则:" rule stop $rule sleep 5 read -p "请输入启动rcs-jar文件夹路径:" dir read -p "请输入启动rcs-jar文件匹配规则:" jarPath start $dir $jarPath } status(){ jars=$(find $1 -name $2) for jar in ${jars[@]} do pid=$(ps -au$USERNAME | grep $jar | grep -v grep | grep -v deploy | awk '{print $2}') if [[ $pid == '' ]] then echo '未启动:' $jar else echo '已启动-['$pid']:' $jar fi done } #maven打包 package(){ cd $PROJECT_PATH /Users/zhanglu/Library/Application\ Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/202.7660.26/IntelliJ\ IDEA.app/Contents/plugins/maven/lib/maven3/bin/mvn clean package -Dmaven.test.skip=true } #上传至服务器路径 #根据输入参数,选择执行对应方法,不输入则执行使用说明 case "$1" in "start") start $2 $3 #目录 匹配文件 ;; "stop") stop $2 ;; "status") status $2 $3 #目录 匹配文件 ;; "restart") restart ;; "package") package ;; *) esac #ps -auzhanglu | grep '.*rcs.*.jar' | grep -v grep | grep -v deploy | awk '{print $2}' #'com.jshb.*$' #find /Users/zhanglu/Desktop/lu/workspace/南京数脉动力信息技术有限公司/work_space/电信5楼项目组/5G消息/lu_work_space/RCS -name 'rcs-*.jar' #sh shell.sh stop .*rcs.*.jar #sh shell.sh start /Users/zhanglu/Desktop/test rcs-*.jar #sh shell.sh restart #sh shell.sh status /Users/zhanglu/Desktop/test rcs-*.jar #sh shell.sh package1
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
99
100
101
102
103
1043.0 分模块多jar,远程服务器
14.0
# nc
server: nc -l 8888 nc -lk 8888 client:nc 127.0.0.1 88881
2
3
4