Linux后台运行服务,以及日志动态检测相关命令
前言
docker用的多了, 偶然用一次linux的命令竟然忘记了, 虽然这类东西搜索下就可以很快得到答案, 但毕竟不常用, 懒得每次都搜索, 所以这次就随便找一篇转载整理上来吧, 万一又用的时省点事(少大一个字是一个字)。
Linux如何后台运行服务
如何开启
1、nohup
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ] [ & ]
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
退出状态:该命令返回下列出口值:
126 可以查找但不能调用 Command 参数指定的命令。
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。
2、&
用途:在后台运行
一般两个一起用
nohup command &
举个例子
nohup python3 main.py > main.log 2>&1 &
0:代表 – stdin (standard input)标准输入
1: 代表– stdout (standard output)标准输出
2 :代表– stderr (standard error) 标准错误
2>&1是将标准错误(2)重定向到标准输出(&1),而标准输出(&1)在此命令下是默认被重定向输入到main.log文件中的。(此时例子中指定了日志文件为main.log, 若无文件指定默认为nohup.out)
实时动态的检测日志
tail -f FileName
如用 tail -f nohup.out
, 来实时监听我们后台所运行服务的log文件。
如何关闭(停止/杀死)后台服务
我们需要先找到服务的进程号(PID), 然后使用kill -9 PID
命令来杀死这个后台服务进程, 那么我们如何获得服务的进程号呢? 可以利用以下命令:
第一种方法:jobs -l
第二种方法,根据服务名称查询相关服务信息, 进而得到其PID,如下:
1
2
3
4
5$ ps -aux | grep 进程名
# 此命令使用后某个进程 pid 是不顾定的,每次使用命令后都有变化,原
# 因是 grep 本身会产生的一条输出,是正常现象,一般不用管。(可以对
# 此命令执行两次,来排除那个不需要的动态pid信息)
# 如 "ps aux | grep nginx | ps aux | grep nginx"第三种方法,根据已知服务的端口号获取服务,进而得到其PID,如下:
1
2
3
4
5$ ss -apn | grep 8080
或
$ netstat -apn | grep 8080
或
$ lsof -i:8080