最近玩 Node js ,想常驻一个服务, node index.js 。直接再命令行这样玩的话,当你 ctrl + c 或者
关闭命令行是,服务随着关闭结束。
那怎么操作能让他在后台常驻运行呢?常驻之后,我又能怎么手动结束这个进程呢?
1. 常驻后台:
nohup 指令 &
使用 nohub + 对应需要执行的指令 + & 就能实现后台常驻。
例如上面的 node index.js 需要常驻的话,就应该这样写:
nohub node index.js &
这个时候,命令行中会给你返回出进程 id :
[1] 83281
appending output to nohup.out
- 结束进程
常驻后台后,你不得不面临第二个问题,如何手动结束该进程, kill -9 帮你解决:
kill -9 83281
[1] + 83281 killed nohup node index.js
接着再重复上面的开始指令。
- 查看端口对应进程
如果上面说的进程ID 你已经记不得,这个也不要紧,使用 lsof -i <端口号>
lsof -i:80
node 83281 lovejjfg 22u IPv6 0x7bc41b53c97391cf 0t0 TCP *:http (LISTEN)
ok ,再重复操作步骤2 ,完成。
到这里,内容算完成了。
异常问题,如果在 zsh 中出现以下错误:
zsh: you have running jobs
那么在 nohup 指令 & 指令最后再添加一个 !。 像这样:
nohup 指令 &!
思来想去总觉这一对操作太麻烦了,简单用一下都挺累的。各种指令需要切换,难道就没有大佬解决这个问题吗?
哈哈 , pm2 解决你所有烦恼。
-
pm2 开启服务:
pm2 start index.js --name index_debug
-
查看后台服务列表
通过以上指令,你就开启了 index.js 的服务。如何查看已开启的服务呢?pm2 list
这里的 name index_debug 就是这个刚刚我们开启指令所指定的 name 。 最后, 还有一个 watching ,这个是啥意思呢?
- 自动重启
这就涉及到重启刷新的问题,如果 pm2 能在我们更新代码后自动更新服务岂不美哉?只需要在 start 的指令后增加 --watch 的参数即可。
pm2 start index.js --name index_debug --watch
- 手动重启
如果没有设置 watch ,那么你就需要手动重启,在这个时候,只需要 执行 restart 操作。
当然,这只是入门的基本操作指令。例如 watch 是否需要过滤某些文件修改等。详情请阅读请继续看官方文档。
参考链接:
https://www.jianshu.com/p/7e60a2d76aa5
https://www.cnblogs.com/chyingp/p/pm2-documentation.html
https://www.cnblogs.com/sparkdev/p/6659629.html