当我们通过ssh连接到服务器,并运行一个简单的脚本文件,在会话未断开的时候是可以一直运行的,但是如果因为网络抖动等因素导致会话断开时我们所正在运行的脚本也跟随着关闭。
这个时候nohop 这个命令就会帮助我们在会话断开后脚本仍旧运行的神器。
nohop ./nps & #该命令可以让我们的脚本在后台运行
但是这个也有个问题就是随着时间越长脚本产生的日志也跟随着变大几K的脚本产生的日志文件却又几百兆,用不了多长时间磁盘的空间就会被占满。
因此我们可以使用以下解决方法:
nohup ./nps >/dev/null 2>nps.log & #只输出错误的信息
nohup ./nps >/dev/null >/dev/null 2>&1 & #什么信息都不要所有信息都输出到/dev/null 黑洞文件中。
1. >/dev/null
这条命令的作用是将标准输出1重定向到/dev/null中。 /dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。那么执行了>/dev/null之后,标准输出就会不再存在,没有任何地方能够找到输出的内容。
2. 2>&1
这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的作用是错误输出将和标准输出同用一个文件描述符,说人话就是错误输出将会和标准输出输出到同一个地方。
linux在执行shell命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向的命令,所以>/dev/null 2>&1的作用就是让标准输出重定向到/dev/null中(丢弃标准输出),然后错误输出由于重用了标准输出的描述符,所以错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了。执行了这条命令之后,该条shell命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中。