控制命令概览:
目前创新互联公司已为1000多家的企业提供了网站建设、域名、网络空间、网站托管运营、企业网站设计、阜康网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
1、command让进程在后台运行。
2、jobs查看后台运行的进程。
3、fg%n让后台运行的进程n到前台来。
4、bg%n让进程n到后台去,"n"为jobs查看到的进程编号。
在你的任意目录输入命令: npm install pm2 -g
1.找到全局环境PATH路径
输入命令: echo $PATH
回车后: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
你的路径和我的可能不一样,但没关系,你可以选择任何一个以:隔开的路径做为系统环境路径,我通常会选 /usr/local/bin
2:找到pm2的安装路径
在上面输入 npm install pm2 -g 全局安装时
/usr/sbin/nodejs/bin/pm2 - /usr/sbin/nodejs/lib/node_modules/pm2/bin/pm2
/usr/sbin/nodejs/bin/pm2 是安装路径(你的可能和我的不一样)
3.好了都找到了,
就重要的一步要开始了,睁大你的双眼。
命令为: ln -s /usr/sbin/nodejs/bin/pm2 /usr/local/bin/ (注意空格)
格式: ln -s 空格 pm2安装路径 空格 系统环境路径
OK,搞定,接下来验证一把…
[root@iZmwyb7v60px1zZ ~]# pm2 list
回车...
$ pm2 start app.js # 启动app.js应用程序
$ pm2 start app.js –name=”api” # 启动应用程序并命名为 “api”
$ pm2 start app.js –watch # 当文件变化时自动重启应用
$ pm2 start script.sh # 启动 bash 脚本
$ pm2 list # 列表 PM2 启动的所有的应用程序
$ pm2 monit # 显示每个应用程序的CPU和内存占用情况
$ pm2 show [app-name] # 显示应用程序的所有信息
$ pm2 logs # 显示所有应用程序的日志
$ pm2 logs [app-name] # 显示指定应用程序的日志
$ pm2 stop all # 停止所有的应用程序
$ pm2 stop 0 # 停止 id为 0的指定应用程序
$ pm2 restart all # 重启所有应用
$ pm2 reload all # 重启 cluster mode下的所有应用
$ pm2 gracefulReload all # Graceful reload all apps in cluster mode
$ pm2 delete all # 关闭并删除所有应用
$ pm2 delete 0 # 删除指定应用 id 0
$ pm2 scale api 10 # 把名字叫api的应用扩展到10个实例
$ pm2 reset [app-name] # 重置重启数量
$ pm2 startup # 创建开机自启动命令
$ pm2 save # 保存当前应用列表
$ pm2 resurrect # 重新加载保存的应用列表
$ pm2 update # Save processes, kill PM2 and restore processes
$ pm2 generate # Generate a sample json configuration file
当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件。对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨)。为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可供使用。
:当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上 实现后台运行。例如:sh test.sh
适合在后台运行的命令有f i n d、费时的排序及一些s h e l l脚本。在后台运行作业时要当心:需要用户交互的命令不要放在后台执行,因为这样你的机器就会在那里傻等。不过,作业在后台运行一样会将结果输出到屏幕上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件中:
这样,所有的标准输出和错误输出都将被重定向到一个叫做out.file 的文件中。
PS:当你成功地提交进程以后,就会显示出一个进程号,可以用它来监控该进程,或杀死它。(ps -ef | grep 进程号 或者 kill -9 进程号)
nohup:使用命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。nohup命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。该命令的一般形式为:
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
使用了nohup之后,很多人就这样不管了,其实这样有可能在当前账户非正常退出或者结束的时候,命令还是自己结束了。所以在使用nohup命令后台运行命令之后,需要使用exit正常退出当前账户,这样才能保证命令一直在后台运行。
ctrl + z :可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
Ctrl+c :终止前台命令。
jobs: 查看当前有多少在后台运行的命令。 jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
21解析:
扩展链接:如何写高效的代码,和代码优化方法
在linux系统中有这两个命令 ctrl+z 和ctrl+c ,这两个命令输入之后看起来结果差不多,实质是不同的。
他们都有中断命令的效果,但是作用是不一样的。
ctrl+c是强制终止程序的执行并结束进程。而ctrl+z则只是中断任务的执行,但该任务并没有被结束。
它只是在进程中维持挂起的状态,用户可以使用fg/bg命令来继续前台/后台执行该任务。fg命令会重启
前台被中断的任务,bg命令会把中断的任务放到后台执行。
你也可以使用bg这样的方法让一个前台执行的任务切换到后台去执行。
也可以使用fg这样的方法让一个后台执行的任务切换到前台去执行。
还有一个最常用的方法是
在一行命令的最后输入,可以让这行命令放到后台去运行。
使用jobs命令查看当前有多少后台程序在运行。
背景 :工作需要,需要远程控制主机使其断开Xshell后也能一直运行。
关键字 : ,nohup,脚本挂起。
在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 在程序结尾来让程序自动运行。
键入Ctrl + C,发出SIGINT信号,程序会继续运行
方法一、输入命令:jobs
方法二:输入命令:ps
fg、bg、jobs、、nohup、ctrl+z、ctrl+c 命令
加在一个命令的最后,可以把这个命令放到后台执行,如
可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
查看当前有多少在后台运行的命令
jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。
将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。
法子1:通过jobs命令查看job号(假设为num),然后执行kill %num
法子2:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
前台进程的终止:Ctrl+c
如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
如上所示:
nohup 和 组合了后台运行程序。
可以输出到 out.log保存程序输出,也可以输出到/dev/null 即空设备,不保存输出。
上面三种方式无论在nohup.out 或test.out都看不到数据结果,这是因为python执行有缓存输出
解决
新的接口接入查看程序
使用后台运行程序:
结果会输出到终端
使用Ctrl + C发送SIGINT信号, 程序免疫
关闭session发送SIGHUP信号, 程序关闭
使用nohup运行程序:
结果默认会输出到nohup.out
使用Ctrl + C发送SIGINT信号, 程序关闭
关闭session发送SIGHUP信号, 程序免疫
平日线上经常使用nohup和配合来启动程序:
同时免疫SIGINT和SIGHUP信号
同时,还有一个最佳实践:
不要将信息输出到终端标准输出,标准错误输出,而要用日志组件将信息记录到日志里
nohup和究竟有啥区别
第一种nohup命令来让程序在后台运行
括号内容表示可以将平时输出到控制台中的内容重定向到*.log这个文件中,这个是可选的,如果没有这个,则会默认输出到nohup.out文件中。括号后面你的表示后台运行。
举个例子:
第二种方法是写一个脚本,假设我们定义了一个脚本run.sh
#!/bin/bash 是指此脚本使用/bin/bash来解释执行下面的语句,其中cd是表示将当前目录跳到所要运行文件所在目录,然后python3 文件名.py则表示运行***python文件,当写完该脚本后,执行以下命令来执行该脚本从而让程序在后台运行。
通过 ps -ef|grep python3 命令可以查看后台运行的进程都有哪些