引子
解决 CentOS 7 下 Git 超时后,发现库还是太大,要花费比较长的时间,还是让其在后台运行比较好,这样不用一直保持登录。找了下资料,总结一下。
相关知识点
Shell
Shell 是一种命令语言,也是一种程序设计语言。它是用户使用 Linux 的桥梁。Shell 脚本,是一种为 Shell 编写的脚本程序。Shell 脚本编程跟 JavaScript 一样,只要有一个能写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。Linux 的 Shell 种类很多,常见的有:
- Bourne Shell(/usr/bin/sh或/bin/sh)
- Bourne Again Shell(/bin/bash)
- C Shell(/usr/bin/csh)
- K Shell(/usr/bin/ksh)
- Shell for Root(/sbin/sh)
Linux nohup 命令
nohup 全称是 no hang up
,也就是不挂起的意思,用于在系统后台不挂断地运行命令,退出终端也不会影响程序的运行。
nohup 命令,在默认情况下(非重定向时),会输出一个名叫 nohup.out
的文件到当前目录下,如果当前目录的 nohup.out
文件不可写,输出重定向到 $HOME/nohup.out
文件中。
语法格式:
nohup Command [Arg…] [&]
- Command:要执行的命令。
- Arg:参数,可以指定输出文件。
- &:让命令后台执行。
更多内容见这里。
实现方式
写一个脚本,然后让其后台运行。
git.sh
脚本内容很简单:
echo 'git clone start'
git clone https://github.com/XXx/xxx.git
echo 'git clone end'
在非可视化终端操作顺序:
# 创建文件
> git.sh
# 编辑文件
vim git.sh
# 执行脚本
nohup ./git.sh &
执行的时候出现了提示:
nohup: 无法运行命令"./git.sh": 权限不够
添加权限:
chmod +x ./git.sh
再次执行脚本后,出现下面的提示:
注意这个时候,需要按任意键退回到 shell 输入命令窗口,退出的时候使用 exit
命令退出。
如果上述程序执行完成,会在 nohup.out
文件中写入脚本中对应的提示信息。
查看
查看正在执行的后台任务:
jobs -l
可以发现,跟执行脚本成功后出现的数字提示一致。
jobs
命令只对当前终端有效,关闭或退出终端后,在另一个终端 jobs
命令无法看到后台运行的程序,此时可以使用 ps
命令:
ps -aux|grep git.sh
如果想要关闭对应进程:
kill -9 进程号
其它
Mac 下执行 shell 脚本提示没有权限:
permission denied: ./git.sh
修改权限后再次执行就可以了
chmod 777 ./git.sh
./git.sh