nohup停止(nohup失效)

http://www.itjxue.com  2023-02-18 13:34  来源:未知  点击次数: 

nohup 的程序怎么停止

用 nohup, 例如: nohup your_c_program 这个c程序就会在後台继续执行(无论putty有没有被关闭) 这个c程序的output会被储存在nohup.out中。

shell调用beeline导致nohup后台进程stopped

nohup启动java进程调用shell执行beeline命令导致nohup进程stopped,java进程消失了。

环境变量增加如下之后解决。

export HADOOP_CLIENT_OPTS="$HADOOP_CLIENT_OPTS -Djline.terminal=jline.UnsupportedTerminal"

如果后台程序试图读取终端,这并不是一个错误,但是终端驱动程序将检测这种情况,并向后台作业发送一个特定信号SIGTTIN,该信号会停止此后台程序,并向用户发送通知。

守护进程 nohup

nohup和的区别

: 指在后台运行

nohup: 不挂断的运行,注意并没有后台运行的功能,,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响他的运行,注意了nohup没有后台运行的意思;才是后台运行

是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出

那么,我们可以巧妙的吧他们结合起来用就是

nohup COMMAND

这样就能使命令永久的在后台执行

例如:

1. sh test.sh ?

将sh test.sh任务放到后台 ,即使关闭xshell退出当前session依然继续运行,但 标准输出和标准错误信息会丢失(缺少的日志的输出)

将sh test.sh任务放到后台 ,关闭xshell,对应的任务也跟着停止。

2. nohup sh test.sh?

将sh test.sh任务放到后台,关闭标准输入, 终端不再能够接收任何输入(标准输入) ,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。

3. nohup sh test.sh ?

将sh test.sh任务放到后台,但是依然可以使用标准输入, 终端能够接收任何输入 ,重定向标准输出和标准错误到当前目录下的nohup.out文件,即使关闭xshell退出当前session依然继续运行。

参考链接:

linux后台执行命令:和nohup的用法,确实很实用

当我们在终端或控制台工作时,可能不希望由于运行一个作业而占住了屏幕,因为可能还有更重要的事情要做,比如阅读电子邮件。对于密集访问磁盘的进程,我们更希望它能够在每天的非负荷高峰时间段运行(例如凌晨)。为了使这些进程能够在后台运行,也就是说不在终端屏幕上运行,有几种选择方法可供使用。

:当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上 实现后台运行。例如: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后台自动执行命令nohup与日志查看

在linux上执行脚本,当退出页面或电脑锁屏后,脚本就停止执行了。对需要长时间运行的脚本非常不友好。

nohup(no hang up):可以让程序不挂断执行。

:可以让程序在后台执行。

“ nohup.log”: 表示将日志输出到nohup.log文件上。

21:表示将正确日志、错误日志都输出到正确日志指定的文件(nohup.log文件)上。

Lunix运行脚本、任务(sh、nohup、qsub)

产生日志:

sh **.sh xx.log

不产生日志:

sh **.sh /dev/null 21

nohup:no hang up 的缩写,就是不挂断的意思 。?

nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。 该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。 在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中。

使用权限:所有使用者

语法格式

nohup Command [ Arg … ] [  ]

参数说明:

Command :要执行的命令。

Arg :一些参数,可以指定输出文件。

:让命令在后台执行,终端退出后命令仍旧执行。

实例

以下命令在后台执行 root 目录下的 runoob.sh 脚本:

nohup /root/runoob.sh

在终端如果看到以下输出说明运行成功:

appending output to nohup.out

这时我们打开 root 目录 可以看到生成了 nohup.out 文件。

如果要停止运行,你需要使用以下命令查找到 nohup 运行脚本到 PID,然后使用 kill 命令来删除:

ps -aux | grep "runoob.sh"

参数说明:

a ?: 显示所有程序

u ?: 以用户为主的格式来显示

x ?: 显示所有程序,不区分终端机

另外也可以使用?ps -def | grep "runoob.sh" 命令来查找。

找到 PID 后,就可以使用 kill PID 来删除。

kill -9? 进程号PID

以下命令在后台执行 root 目录下的 runoob.sh 脚本,并重定向输入到 runoob.log 文件:

nohup /root/runoob.sh runoob.log 21

21 ?解释:将标准错误 2 重定向到标准输出 1 ,标准输出 1 再被重定向输入到 runoob.log 文件中。

0 – stdin (standard input,标准输入)

1 – stdout (standard output,标准输出)

2 – stderr (standard error,标准错误输出)

实时监测日志输出内容命令:tail

tail 命令是nohup命令的好搭档。配合-f参数,可以实时监视向日志文件增加的信息。

tail -f myout.log

tail -f 等同于–follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止

tail -F 等同于–follow=name --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪

tailf 等同于tail -f -n 10,与tail -f不同的是,如果文件不增长,它不会去访问磁盘文件,所以tailf特别适合那些便携机上跟踪日志文件,因为它减少了磁盘访问,可以省电。

监测程序是否在正常运行中:ps

ps命令也可以和nohup命令配合使用,用于显示当前进程 (process) 的状态。可以监视后台程序是否在正常运行中或者已经挂掉。

ps -ef|grep yourcommand? ? ? ? ? ?# -ef 参数显示所有命令,连带启动时的命令行参数

qsub命令用来从登陆节点上向计算节点进行任务投递。前提是在服务器上有集群管理工具分配计算节点等。SGE(SGE, Sun Grid Engine)集群管理工具可以用来提交批处理作业,SGE支持单或多节点作业,它将用户投递的任务进行排队,然后将任务交给能够运行的结算节点执行,工作流程可以分为四步:接受用户投放的任务;在任务运行以前,将任务放到一个存储区域;发送任务到一个执行设备,并监控任务的运行;运行结束写回结果并记录运行日志。

qsub [ options ] [ command | -- [ command_args ]]

1.?-@ optionfile (contains all valid options) ?就是把qsub命令的可选项组合成一定功能的语句,保存在一个文件中。 ?qsub -a optionfilename jobfilename ?

2.?-a date_time ??设置作业什么时候可以执行。 ??格式:CC YY MMDDHHMM.SS 如 201109272213.21 ??qsub -a 201109272213.21 ../simplejob

3.?-A account_string ?Identifies the account to which the resource consumption of the job should be charged ??设置一个作业的账户名,便于统计该账户使用的资源等信息 ???qsub -A testaccountname jobname ?

4.?-ac 添加名/值对到作业上下文 ??-dc 删除。。 ??-sc 设置(修改)。。 ??Contexts provide a way to dynamically attach and remove meta- ??? information to and from a job. The context variables are not ??? passed to the job's execution context in its environment ??? The outcome of the evaluation of all -ac, -dc, and -sc options ??? or corresponding values in qmon is passed to defined JSV ??? instances as parameter with the name -ac. ?

5.?-ar ar_id 分配已提交作业,作为它的一部分,给已存在预约。ar=advance reservation ??qsub -ar 60 jobname?? #ai_di = unsigned integer???

6.??-b y[es]|n[o] ? ???Gives the user the possibility to indicate explicitly whether ????? command should be treated as binary or script. ????

7.?-binding 等待理解

8.? -c occasion_specifier(际符)? 定义或者重定义作业是否要被检查,if是,在什么环境下。 ???????n?????????? no checkpoint is performed. ????????????? s?????????? checkpoint when batch server is shut down. ????????????? m?????????? checkpoint at minimum CPU interval. ????????????? x?????????? checkpoint when job gets suspended. ????????????? interval? checkpoint in the specified time interval. ??qsub -c n jobname

9.?-C prefix_string 前缀字符串定义一个在作业命令中的指令?? ??qsub -C "#$" ../simplejob???

10.??-ckpt ckpt_name 选择检查点环境来检查一个作业,同时声明这个作业是检查点作业。?? ???qsub -ckpt allanckpt ../simplejob ???

11.??-clear 重置作业的所有元素为初始默认状态 ???qsub -clear ../simplejob ??

12.??-cwd =current working directory??从当前的目录开始执行作业。如果有相应的配置文件的话, ???这个命令将启动网格引擎的路径别名设备。?? ?

13.??-dl date_time?设置作业在deadline之前执行完,格式为CC YYU MMDDHHMM.SS ???qsub -dl 201101131159.01 ../simplejob

14.??-e [[hostname]:]path,...定义或重新定义作业的标准错误流使用的路径 e=stderror

15.??-h | -h {u|s|o|n|U|O|S}... h=hold 暂停作业执行 ??????'u' .........user hold. ??????????? `s'? denotes a system hold. ????????????? `o'? denotes a operator hold. ????????????? `n'? denotes no hold (requires manager privileges). ????????????? `U'? removes a user hold. ????????????? `S'? removes a system hold. ????????????? `O'? removes a operator hold. ???????qsub -h ../simplejob(qsub只能使用-h)

16.??-l resource=value,... l=launch 启动满足资源需求的作业 ???Launch the job in a Grid Engine queue meeting the given resource ????????????? request list.? In case of qalter the previous definition is ????????????? replaced by the specified one. ???qsub -l s_core=5 ../simplejob

17.??-q wc_queue_list 定义或重定义可能用来执行作业的队列,包括群聚队列、队列域、队列实例。 ???qsub -q all.q ../simplejob

18.??-hard? 表示该作业在安排执行之前,作业的资源需求必须满足。 ???qsub -hard? ../simplejob

19.??-soft 表示该作业在安排执行之前,作业的资料需求可以有、但不必须有。 ???qsub -soft ../simplejob

20.??-help 获取帮助 ???qsub -help

21.??-hold_jid?? wc_job_listt 定义或重定义当前提交的作业对哪些作业有依赖,所依赖的作业使用通配符作业清单表示:wc_job_list ???qsub -hold_jid 63926 ../simplejob

22.??-hold_jid_ad wc_job_list?ad=array dependency list of the submitted job ???定义或者重定义组作业依赖列表。 ???qsub -hold_jid_ad 1-1200

23.??-t n[-m[:s]] ???指定组作业的数量,将指示器与作业关联 ???qsub -t 1-1200 ../simplejob

24.??-i [[hostname]:]file,... 定义或重定义一个文件为作业的标准输入流 ???qsub -i stdin job

25.??-j y[es]|n[o] 指定作业的标准错误流是否合并到标准输出流,如果-j y 和-e都存在的话,SGE将忽略后者。 ???qsub -j y ../simplejob

qstat -f # 查看用户任务

qstat -j jobId? # 按任务id查看

qstat -explain a|c|A|E -j jobID # 查看任务任务并给出解释

qstat -u user? # 按用户查看

qw: 表示等待状态

hqw: 任务挂起等待中,待依赖的任务完成后执行

Eqw: 投递任务出错

r: 表示任务正在运行

s: 暂时挂起

dr: 节点挂了之后,删除任务就会出现这个状态,只有节点重启之后,任务才会消失

qdel -j 1111? 删除任务号为1111的任务

qdel -u AAA? 删除AAA投递的所有任务

欢迎大家交流心得~~~3QU!!!...........

---------------------------------------------------------------------------------------------------------I am a line !----------------------------------------------------------------------------------------------

(责任编辑:IT教学网)

更多

相关Flash动画制作教程文章

推荐Flash动画制作教程文章