【Linux】Linux后台任务(nohup、screen)
一、nohup
nohup npm start &
加’&’表示将进程丢到后台,但是当退出该终端时很有可能这个脚本也会退出,而在前面加上’nohup’就没有问题了。nohup的作用就是不挂断地运行命令。
如果标准输出是一个终端,尽可能将输出添加到"nohup.out",
否则添加到"$HOME/nohup.out"。
如果标准错误输出是一个终端,重定向它到标准输出。
要保存输出内容到一个文件,使用 “nohup COMMAND > FILE” 形式的命令。
查看日志:
tail -f nohup.out
但使用非root账号启动也会在退出该终端时服务停止。
二、screen
screen状态有四种:
1.Attached 目前正在工作当中,当使用Ctrl+a+d就会退出工作状态,状态就会变Detached,但是还是后台工作
2.Datached 在后台工作当中,也可以在Attached状态时使用命令screen -r 1000让其变成Datached状态
3.Dead ??? 死亡状态,这个需要用的命令是kill -9 3000,如果已经是Dead状态,用这命令是会报错的,只能去杀前两种状态的screen进程
4.Removed 当使用screen -wipe删掉某个screen进程的时候显示
screen 命令的的用法:
screen常用参数:
-A 将所有的视窗都调整为目前终端机的大小。
-d <作业名称> 将指定的screen作业离线。
-h <行数> 指定视窗的缓冲区行数。
-m 即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称> 恢复离线的screen作业。
-R 先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s <shell> 指定建立新视窗时,所要执行的shell。
-S <作业名称> 指定screen作业的名称。
-v 显示版本信息。
-x 恢复正在工作的screen作业。
-ls或--list 显示目前所有的screen作业。
-wipe 检查目前所有的screen作业,并删除已经无法使用的screen作业
下面对参数做出一些说明:
1.screen 运行screen命令后会自动打开一个新shell,在这个新的shell里可以运行任何命令。一般只开一个。可以想象成上网一般只用开一个浏览器。新建bash,最多可建10个。每一个bash都可以单独浏览和工作。可以想象成浏览器的标签。
crtl+A+数字[0-9] #直接跳到第n个bash
ctrl+A+A #bash之间快速切换
2.exit 退出screen(记得你退出的是bash还是screen)
3.如果一个进程很重要,不想在退出终端的时候中断,可以按ctrl+a+d (先ctrl+a 后按d就可以),也就是在此时(关闭终端的时候),screen屏蔽掉了父目录发送的signhup命令。进程由Attached状态变成Datached
4.screen -r 列出进入Datached状态的screen
5.screen -r pid 恢复对应的进程
6.screen -S hehe 进程里就会看到这个screen被标为 hehe.ttyn.host,而不是进程ID。类似于备注提示
7.screen -d pid将Attached状态的screen变成Datached(同ctrl+a+d)