awk入门小记

作者:matrix 发布时间:2019年11月6日星期三 分类:command Linux

图片5055-awk入门小记

awk用于unix的文本处理,经常出现和使用。读取每一行文本进行格式化输出。

测试环境 Macos

awk简单操作

默认使用空格进行字符串分割

echo '1 2 3' |awk '{print $0}' # 1 2 3

echo '1 2 3' |awk '{print $3}' # 3

echo -e "1\n2\n3" |awk '/[23]/' #正则条件查找

echo -e "abc\n1a2\n33" |awk '/a/' #正则条件查找字母a 

awk '{print $3}' file_path #指定文件

ls -alh|awk '/^d/' #输出目录
# drwxr-xr-x    3 panc  staff    96B  7 16 23:32 pt-program

echo '1-2-3' |awk -F '-' '{print $2}' #指定分割符号 -  输出 2

$0表示当前行
$1表示第一个分割的字段

awk命令后面跟操作的语句字符串''包裹,每个语句段落用花括号{}包裹,语句段落中用分号;分隔语句。

echo -e '1 2 3\n4 5 6' |awk '{print $0;print("-end-")}'
echo -e '1 2 3\n4 5 6' |awk '{print $0;}{print("-end-")}'
#上面输出结果相同
#1 2 3
#-end-
#4 5 6
#-end-


echo -e '1 2 3\n4 5 6' |awk '{print $1,$3}'
#输出
#1 3
#4 6

使用内置变量

NF表示当前行有多少个分割字段

echo  '1-2-3' |awk -F '-' '{print $(NF)}' # 3  获取最后一个分割字符
echo  '1-2-3' |awk -F '-' '{print $(NF-1)}' # 2  获取倒数第二个分割字符

其他变量
NR表示当前处理的是第几行

BEGIN预处理

在执行处理之前提前设置一些信息
比如之前的-F参数可以使用BEGIN来设置

echo -e "a-b-c" |awk 'BEGIN{FS="-"} /^a/{print $0}' #设置分割符为-

echo -e "a-b-c" |awk 'BEGIN{FS="-";print "this title::"} {print $0}' #设置输出的首行标题

echo -e "1122\n3344" |awk 'BEGIN{FIELDWIDTHS="2 2";} {print $1,$2}' #固定字段宽度  (mac os中测试失败)
#输出
#11 22
#33 44

内置变量
FS字段分隔符
FIELDWIDTHS指定字段宽度
ORS指定输出的行分隔符

if逻辑处理

awk还可以支持函数和复杂的逻辑处理,完全可以在里面定义函数 调用 判断

例子:
显示红色error
绿色seccess
白色log


echo -e 'success\nerror\nsuccess\nloginfo' | awk \ '{ if (/error/) { print "\033[91m" $0 "\033[0m" } else if (/success/){ print "\033[32m" $0 "\033[0m"; }else{ print $0 } next; }'

上面语句有换行的段落方便阅览。一行简写也是可以
例子:
判断值大小

echo -e '12\n14\n232\n90' |awk '{if($0>=90) print $0}' #输出>=90的数据
#232
#90

for循环

使用for循环计算求和


echo '5' |awk '{ \ total = 0 for (var = 1; var < $0; var++) { total += var } print "total:",total }'

Built-In Functions函数使用

awk中语义中支持函数的使用

echo -e 'H htjim\nDot\ncom\n009' |awk '{print toupper($0)}'#转换为大写

内置函数
toupper 转换为大写
tolower 转换为小写
rand 随机数

其他函数参考手册:
https://www.gnu.org/software/gawk/manual/html_node/Built_002din.html#Built_002din

自定义函数

自定义彩色文字输出函数awk内部执行调用


echo -e 'success\nerror\nsuccess\nloginfo' | awk \ ' function red(s) { printf "\033[1;31m" s "\033[0m " } function green(s) { printf "\033[1;32m" s "\033[0m " } function blue(s) { printf "\033[1;34m" s "\033[0m " } { if (/error/) { print red($0) } else if (/success/){ print green($0) }else{ print blue($0) } }'

其他例子

结合tail -f log显示红色报错提示

 tail -f test.log |  awk '{
 if (/success/) {
 print "\033[91m" $0 "\033[0m"
 } else {
 print "\033[32m" $0 "\033[0m"; 
 }
 next;
}';

next用于直接跳到下一行文本进行执行 有点continue的意思

参考:
https://likegeeks.com/awk-command/

http://www.ruanyifeng.com/blog/2018/11/awk.html

https://www.cnblogs.com/Linuxprobe/p/5745381.html

记linux输出重定向操作>&

作者:matrix 发布时间:2019年10月19日星期六 分类:command Linux

今天看到2>&1>/dev/null 2>&1有点相似但又完全不同,一直都是CV方式来使用 仅知道后者用于禁止所有输出信息。

简单整理笔记

基本操作符号和数字描述符号

>用于输出覆盖内容,>>用于输出追加内容
<用于输入,<<用于设置输入结束符号
<<end:表示当输入end的时候结束输入操作

/dev/null表示Linux中的空设备,也当是数据黑洞,无限吞噬。

类型 文件描述符 默认情况 对应文件句柄位置
标准输入(standard input) 0 从键盘获得输入 /proc/self/fd/0
标准输出(standard output) 1 输出到屏幕(即控制台) /proc/self/fd/1
错误输出(error output) 2 输出到屏幕(即控制台) /proc/self/fd/2

输出内容重定向

command >/dev/null 2>&1

这样执行就不会有任何信息显示和保存

补充命令之后:

command 1>/dev/null 2>&1

说明:

>/dev/null等同于1>/dev/null 意思是 当前控制台的信息输出到空设备。

2>&1使用&符号将2重定向绑定到1,意思是将错误信息指向控制台,而这个时候的控制台又指向了空设备。

如果去掉&符号的2>1会导致错误信息输出到文件名为1里面。

Linux执行命令时会按顺序从左到右读取来确定0,1,2这三个输入输出的位置。

command 2>&1 >/dev/null

把两个重定向的位置写反之后就是完全不同的意思。
等同于command 2>&1 1>/dev/null

linux执行命令到2>&1会将错误输出指向1即控制台,到这里就会完成错误输出(2)的位置确定。也就不会更改了。

执行到1>/dev/null会将标准输出(1)指向空设备,而此时的错误输出(2)已经确定位置了就不会发生更改。

所以最终错误信息显示到控制台,正常信息不会看到。

参考:
https://blog.csdn.net/zhaominpro/article/details/82630528
https://www.cnblogs.com/ultranms/p/9353157.html
https://blog.csdn.net/wz947324/article/details/80005224

linux查找maildrop目录超大空间占用

作者:matrix 发布时间:2019年9月20日星期五 分类:Linux

线上centos服务器有很长时间没有连,今天安装证书无故失败,数据库也不能连接。。。一系列的问题

查找占用情况

$ df -h #查看磁盘占用情况
$ du -h --max-depth=1 ./ #查看当前目录的文件/目录占用大小

然后就是手动一层一层的找到最大的那个目录。 😂
最后找到一个隐藏杀手:/var/spool/postfix/maildrop/。这个目录下面存在3000W个小文件,占用33GB。主要它还不是tmp之类的目录,没遇见过真是很难查找。

究其原因是crontab任务日志发送到所有者的邮箱导致的问题

解决方案

  • 方法1

编辑crontab顶部首行写上 MAILTO="",这样就会把邮箱信息赋空,也就不会发送了。

图片5030-linux查找maildrop目录超大空间占用

如果有非root用户的crontab任务也需要在顶部声明MAILTO="".
默认crontab -e是编辑的当前登录的用户定时任务配置,若是以root登录则为/var/spool/cron/root
同理www用户的定时任务文件就是/var/spool/cron/www

  • 方法2

其次就是每条cron任务的最后把输出信息赋空 >/dev/null 2>&1

* * * * * /root/do.sh >/dev/null 2>&1

p.s.

记下以后排查的顺序

  1. web程序日志
  2. nginx/apache日志
  3. tmp
  4. crontab 错误邮件发送日志
    /var/spool/postfix/maildrop
  5. /var/log 类型的log目录
    /var/log/journal 启动目录的文件很多
    ...

参考:
https://www.jianshu.com/p/a0aa43707476
https://my.oschina.net/qimhkaiyuan/blog/1631028

acme.sh配置泛域名证书Let'sEncrypt

作者:matrix 发布时间:2019年9月18日星期三 分类:Linux

环境:
阿里云centos + dnspod.cn

acme.sh项目:https://github.com/Neilpang/acme.sh

安装

$ curl  https://get.acme.sh | sh

图片5018-使用acme.sh配置泛域名证书Let'sEncrypt
出现Install success!安装成功。

dns验证方式-获取域名dns token

这里使用域名解析服务商的token来进行域名拥有验证
在dnspod.cn上操作申请获取ID和token。
ssh执行命令设置变量,便于后面脚本读取。

$ export DP_Id="000000"
$ export DP_Key="26****************************ed"

其他域名解析商的api token操作:
https://github.com/Neilpang/acme.sh/wiki/dnsapi

申请泛域名证书

为域名bjesc.com申请证书。

$ source .bashrc #执行资源更新 确保acme.sh别名可用
$ acme.sh --issue --dns dns_dp -d hhtjim.com -d *.hhtjim.com

说明:
前面-d参数指定根域名,后面-d指定子级泛域名
.hhtjim.com的证书只能支持通配符当前级别的域名,也就是xxx.hhtjim.com
如果要三级子域名就需要单独申请:
.xxx.hhtjim.com,参数为-d xxx.hhtjim.com -d *.xxx.hhtjim.com

执行之后等待几分钟出现绿色文字提示key,cer证书所在位置就酸完成了。

图片5019-使用acme.sh配置泛域名证书Let'sEncrypt

The domain key is here: /root/.acme.sh/hhtjim.com/hhtjim.com.key

Your cert is in  /root/.acme.sh/hhtjim.com/hhtjim.com.cer 
Your cert key is in  /root/.acme.sh/hhtjim.com/hhtjim.com.key 
The intermediate CA cert is in  /root/.acme.sh/hhtjim.com/ca.cer 
And the full chain certs is there:  /root/.acme.sh/hhtjim.com/fullchain.cer

证书生成完成,使用的时候把证书移动到nginx配置相关目录。

nginx证书使用

server {
    listen 443;
    server_name www.hhtjim.com;
    root /htdocs/www.hhtjim.com;
    index index.html index.htm index.php;
    ssl on;

    ssl_certificate /certificate_file_PATH/hhtjim.com/fullchain.cer;
    ssl_certificate_key /certificate_file_PATH/hhtjim.com/hhtjim.com.key;
    ...

ssl_certificate和ssl_certificate_key对应fullchain.cer和域名.key文件即可。
以后的所有子域名都可以使用这个路径的证书。

证书更新

脚本会自行写入crontab

36 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null

每天定时检测过期再更新。

参考:

https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E
https://lnmp.org/faq/letsencrypt-wildcard-ssl.html
https://juejin.im/post/5b6542ed51882519d3468d6d

CentOS命令行安装Matlab R2017b

作者:matrix 发布时间:2019年7月26日星期五 分类:Linux

现在应要求需要再服务器端环境安装matlab以进行更好测试达到理想之效果。

测试环境:本地客户端macOS,服务器centOS 需要20GB空余

下载matlab

https://pan.baidu.com/s/1wijZCXIWsNXgz0yYYBXHnQ#提取e8b2

刚开始用mac三方百度客户端进行下载,没有校验文件md5和基本信息就直接对z01,z02进行解压拿到iso镜像文件挂载没问题。浪费时间一上午进行安装出现输入输出错误原因就是iso不完整。

文件哈希:

$ md5sum R2017b_glnxa64.iso
0bbe62e90ba9aaf357c72ef93e81753c  R2017b_glnxa64.iso

若是本地上传到服务器最好使用rsync附加参数-rP --append来进行断点续传,要不然中断之后重新上传简直。。。

开始安装

需要系统有20GB的剩余空间(包含iso文件,mnt挂载空间,程序安装空间)才可安装,我已经尝试过很多遍了😂😂😂

  1. 挂载镜像文件到/mnt
    $ mount -t iso9660 -o loop R2017b_glnxa64.iso文件路径 /mnt
    

    如果挂载有问题可以考虑直接对iso进行解压缩:

    $ sudo yum install p7zip p7zip-plugins 
    $ 7z x ubuntu-16.10-server-amd64.iso
    
  2. 执行安装

    若之前安装中断或者失败需要清空之前的安装数据,否则会报错。
    删除之前安装的文件:rm -rf /usr/local/MATLAB
    还有安装matlab之前java环境不是必须安装,matlab包里面会自带jre。

    $ cd /mnt
    $ sudo ./install -fileInstallationKey 09806-07443-53955-64350-21751-41297 -agreeToLicense yes -mode silent -activationPropertiesFile  MATLABR2017b_Linux_Crack目录中的license_standalone.lic文件路径
    

    说明:
    license_standalone.lic文件路径需自行替换
    09806-07443-53955-64350-21751-41297为install_key.txt中的授权码

    图片4949-CentOS命令行安装Matlab过程

    执行之后就等待安装,若显示要继续 请点击″是″。 要返回″否″。是否仍要继续?这些也不用管。

    安装完成

    最终等待界面出现End - Successful.Finished即表示安装完成。

破解

安装完成之后执行程序/usr/local/MATLAB/R2017b/bin/matlab显示未激活状态

错误: 激活无法继续。您可能需要执行以下任一操作:
 1.设置 X11 显示,然后重新启动激活过程
 2.使用静默激活功能
 3.使用许可证中心激活

执行激活程序/usr/local/MATLAB/R2017b/bin/activate_matlab.sh -propertiesFile /usr/local/MATLAB/R2017b/activate.ini也没有用。

最后拷贝破解文件解决:
进入破解文件license_standalone.lic,libmwservices.so 所在目录

sudo cp license_standalone.lic /usr/local/MATLAB/R2017b/licenses/ 
sudo cp libmwservices.so /usr/local/MATLAB/R2017b/bin/glnxa64/

启动matlab

设置环境变量,避免每次执行/usr/local/MATLAB/R2017b/bin/matlab很麻烦

$ echo 'export PATH=/usr/local/MATLAB/R2017b/bin:$PATH' >> /etc/profile 
$ source /etc/profile

以后输入matlab就可以启动

Matlab启动成功

卸载之前的iso:umount /mnt

若无法卸载参考https://www.cnblogs.com/sisimi/p/7700309.html来强制推出操作。

后台执行.m脚本

安装服务器版本的最终目的其实就是让其后台运行,但是后面测试的时候发现了很多坑。

比如手动执行nohup matlab -nojvm -nodesktop -nodisplay -nosplash -r test.m > ./logfile &
这样会导致日志输出结果出现大量错误warning的提示,我是直接用supervisord来守护进程,避免手动执行nohup操作。

如果你用nohup matlab -nodesktop -nosplash -nodisplay < test.m >logfile这种<形式来调用脚本那就要小心了,因为会出现更多的错误,像Undefined variable com or class com.mathworks.timer.TimerTask都是小事情,然而我这里是提示语法逻辑错误,感觉是脚本文件加载的时候出现字符问题,原因有很多,我这里没有具体进一步测试。我建议还是不要用<这种形式来执行.m脚本。
参考:https://blog.csdn.net/sethinking/article/details/88375995

还有一个就是执行matlab脚本目录的问题,如果像这样直接-r 'run("/root/test.m");' 执行入口脚本test.m很有可能会找不到其中依赖该目录下的自定义函数。建议-r 'cd /root;test;'这种形式来调用。

最终这样调用:

$ matlab  -nodesktop -nodisplay -nosplash -r 'cd /home/script/;main;'  >> /root/matlab_log_`date +"%Y%m%d"`.log

说明:
/home/script/main.m为脚本入口
这里没有使用-nojvm参数,也没有进一步测试我的脚本依赖是否可以不启动。
>> /root/matlab_log_date +"%Y%m%d".log为输出日志,名称为日期年月日

报错整理

  1. ./install:行269: /bin/glnxa64/install_unix: 输入/输出错误
    确保iso镜像文件的完整性,需要知道iso的文件如果缺失一部分也是可以挂载的。😂
    建议在Windows端用winrar点击R2017b_glnxa64.zip执行解压拿到R2017b_glnxa64.iso

  2. archive is not a ZIP archive那就是空间不足的问题。

  3. 若非首次安装出现问题确保把之前的安装的文件都清空了
    删除之前安装的文件:rm -rf /usr/local/MATLAB

  4. 出现libXt.so。。。Creating local MVM错误

    MATLAB is selecting SOFTWARE OPENGL rendering.
    Unrecognized MATLAB option "version".
    Fatal Internal Error: Unexpected exception: 'N5boost16exception_detail10clone_implINS0_39current_exception_std_exception_wrapperISt13runtime_errorEEEE: Bundle#2 start failed: libXt.so.6: 无法打开共享对象文件: 没有那个文件或目录' in createMVMAndCallParser phase 'Creating local MVM'
    

    这个问题今天上午才搞定,期间安装了很多包都不起作用。MD!!!
    最终执行安装yum install libXt.x86_64才解决。
    中间我也查看过libXt.so.6这个鬼玩意的确是有的,后面看到因为matlab都需要32位和64位的包,所以这鬼玩意一直报错。
    也有可能再期间安装的一部分包是依赖必须的:

    $ yum list  installed |grep libX
    
    libX11.i686                             1.6.5-2.el7                    @base    
    libX11.x86_64                           1.6.5-2.el7                    @base    
    libX11-common.noarch                    1.6.5-2.el7                    @base    
    libX11-devel.x86_64                     1.6.5-2.el7                    @base    
    libXau.i686                             1.0.8-2.1.el7                  @base    
    libXau.x86_64                           1.0.8-2.1.el7                  @base    
    libXau-devel.x86_64                     1.0.8-2.1.el7                  @base    
    libXdamage.x86_64                       1.1.4-4.1.el7                  @base    
    libXdamage-devel.x86_64                 1.1.4-4.1.el7                  @base    
    libXdmcp.i686                           1.1.2-6.el7                    @base    
    libXext.i686                            1.3.3-3.el7                    @base    
    libXext.x86_64                          1.3.3-3.el7                    @base    
    libXext-devel.x86_64                    1.3.3-3.el7                    @base    
    libXfixes.x86_64                        5.0.3-1.el7                    @base    
    libXfixes-devel.x86_64                  5.0.3-1.el7                    @base    
    libXft.x86_64                           2.3.2-2.el7                    @base    
    libXft-devel.x86_64                     2.3.2-2.el7                    @base    
    libXi.i686                              1.7.9-1.el7                    @base    
    libXi.x86_64                            1.7.9-1.el7                    @base    
    libXmu.i686                             1.1.2-2.el7                    @base    
    libXp.i686                              1.0.2-2.1.el7                  @base    
    libXp.x86_64                            1.0.2-2.1.el7                  @base    
    libXrender.x86_64                       0.9.10-1.el7                   @base    
    libXrender-devel.x86_64                 0.9.10-1.el7                   @base    
    libXt.i686                              1.1.5-3.el7                    @base    
    libXt.x86_64                            1.1.5-3.el7                    @base    
    libXtst.i686                            1.2.3-1.el7                    @base    
    libXtst.x86_64                          1.2.3-1.el7                    @base    
    libXxf86vm.x86_64                       1.1.4-1.el7                    @base    
    libXxf86vm-devel.x86_64                 1.1.4-1.el7                    @base 
    

    这里整理一份本机已安装所有libX开头的包,自行取舍。

  5. 大量报错信息 Bad file descriptor 和 Warning: "Error reading character from command line"

参照上面后台执行.m脚本修改命令行调用的方式,去除nohup。使用supervisord工具来守护进程,亦或者不要输出日志。

参考:
https://blog.csdn.net/qq_32892383/article/details/79670871

https://ww2.mathworks.cn/matlabcentral/answers/131366-why-do-i-see-i-o-errors-when-installing-matlab-using-the-iso-image

https://ww2.mathworks.cn/matlabcentral/answers/98745-why-do-i-receive-an-error-message-archive-is-not-a-zip-archive-during-matlab-installation-on-Linux

https://www.jianshu.com/p/a10397fcfb1d

https://blog.csdn.net/Xiao_Song_PKU/article/details/82700228

https://www.cnblogs.com/yaoyaoliu/p/6798463.html

https://linux.cn/article-7992-1.html

https://blog.csdn.net/qq_39187538/article/details/88676283

https://www.cnblogs.com/sisimi/p/7700309.html

https://www.centos.org/forums/viewtopic.php?t=31436

https://ww2.mathworks.cn/matlabcentral/answers/63751-how-do-i-get-matlab-running-in-batch-mode-to-only-output-the-results-of-disp-fprintf-etc-and-no

https://ww2.mathworks.cn/matlabcentral/answers/66793-problem-running-matlab-script-to-background

ssh config多账户/多域名配置

作者:matrix 发布时间:2019年6月18日星期二 分类:Linux

测试环境:ubuntu

客户端连接远程ssh/git服务的时候可以在本地配置SSH config,用于简化多参数使用操作或者修改默认的ssh命令使用的配置。

我这里需要使用gitee的ssh密钥来管理远程仓库代码,方便以后可以免密码提交/更新代码。然而本地已经存在一个~/.ssh/id_rsa私钥,且还设置了用来保护私钥的passphrase密码。如果用之前的私钥连接gitee会造成每次都要求输入passphrase密码,亦或不能单独区分使用。
这个问题可以使用配置文件~/.ssh/config来解决

新建新的密钥对

$ ssh-keygen -t rsa -C "user"

新建的时候设置新密钥的保存路径,避免把之前的覆盖掉

配置

config文件默认是不存在的,直接新建即可

$ vi ~/.ssh/config

使用下面配置:

# gitee账户
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rrsa_gitee

说明:
Host类型昵称,可以简化登录的输入地址,比如Host ccl,则可以用ssh ccl直接连接
HostName表示连接的远程主机地址
IdentityFile表示指定私钥文件路径
还有其他参数
Port指定端口
User指定用户名

这种配置可以让ssh来根据远程host地址来使用不同的私钥,设置了User还可以让ssh工具不同用户名来读取配置,也可以使用相同host地址哟~

比如都是github的不同账户,类似配置:

Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/user1_rsa
User user1


Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/user2_rsa
User user2

参考:
https://gitee.com/help/articles/4229
http://vra.github.io/2017/07/09/ssh-config/
https://gitee.com/help/articles/4181
https://daemon369.github.io/ssh/2015/03/21/using-ssh-config-file

PEACE~

ssh/git pull 无密码登录 自动拉取

作者:matrix 发布时间:2019年5月28日星期二 分类:Linux

测试需要S,C两台服务器,我需要C服务器ssh登录到S服务器进行操作。
目的:服务器C端使用命令git pull无密码登录自动从服务器S拉取最新代码。

客户端生成RSA密钥

服务器C属于客户端角色,需要生成本地服务器的rsa密钥对,然后价格公钥发送到服务器S。
登录服务器C

$ cd ~
$ ssh-keygen -t rsa
#后面就默认回车

默认会在 ~/.ssh中生成id_rsa.pub,id_rsa这两个密钥对。

发送公钥

我之前是手动尝试把公钥文本打来粘贴到服务器S,然而ssh登录的话还是要密码验证。测试发现最好是使用ssh-copy-id命令进行操作。
还是在服务器C进行操作

$ ssh-copy-id -i ~/.ssh/id_rsa.pub login_user@HOST -p 22

说明:
ssh-copy-id命令可以快速的将公钥复制到远程主机
-i 指定公钥路径
login_user 为登录的用户名
HOST 为登录的远程服务器S的地址,域名/IP均可
-p 指定服务器S的ssh端口号

命令输入后应该会让你输入login_user用户的密码,若出现and check to make sure that only the key(s) you wanted were added.则表示公钥应该添加成功。
以免出现问题,现在可以去服务器S端看看,指定用户名login_user的文件/home/login_user/.ssh/authorized_keys会有客户端的rsa公钥。

登录测试

在服务器C操作
测试登录:

ssh login_user@HOST -p 22

若登录成功 BINGO!

其他问题

如出现还是需要密码的情况:

1.需要确定/etc/ssh/sshd_config配置文件中是否允许RSAAuthentication

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

2.用户目录权限问题

.ssh父目录的权限是755(我的是/root),.ssh目录权限是700,authorized_keys文件 600

3.确保仓库地址是ssh地址
如果还是https的话就用git remote set-url origin命令修改下:

$ git remote set-url origin git@HOST:user/project.git

参考:
https://blog.csdn.net/alifrank/article/details/48241699
https://blog.csdn.net/chengyuqiang/article/details/78432675
https://blog.csdn.net/b_x_p/article/details/78534423
https://www.cnblogs.com/0xcafebabe/p/5234678.html

linux重启守护进程Kill -HUP

作者:matrix 发布时间:2019年4月29日星期一 分类:Linux

linux重启守护进程可以使用-HUP参数来发送hang up挂断信号,系统会重启进程进行复位操作重新读取配置文件

There are also different signals that can be sent to both kill commands. What signal you send will be determined by what results you want from the kill command. For instance, you can send the HUP (hang up) signal to the kill command, which will effectively restart the process. This is always a wise choice when you need the process to immediately restart (such as in the case of a daemon). You can get a list of all the signals that can be sent to the kill command by issuing kill -l. You’ll find quite a large number of signals>

usage

指定进程ID 1011:

kill -HUP 1011

使用/var/run查看进程的ID,操作指定进程

kill -HUP `cat /var/run/nginx.pid`

-HUP无法生效参考:
https://docs.oracle.com/cd/E19253-01/819-7842/fhkpa/index.html

参考:
https://www.linux.com/learn/intro-to-Linux/2017/5/how-kill-process-command-line
https://blog.csdn.net/u011350541/article/details/50718085
https://www.cnblogs.com/codingcloud/p/5095066.html