精华内容
下载资源
问答
  • 今天再docker内启动程序的时候,打算将屏幕输出等重定向到日志文件中,但是启动程序后,通过tail -f命令查看日志文件,发现日志文件没有及时更新。试了几次都一样,但是之前使用这个命令的时候,都是可以看到日志...

    今天再docker内启动程序的时候,打算将屏幕输出等重定向到日志文件中,但是启动程序后,通过tail -f命令查看日志文件,发现日志文件没有及时更新。试了几次都一样,但是之前使用这个命令的时候,都是可以看到日志文件动态变化更新的。

    后来查了一下,是Python的输出缓冲导致更新不及时。

    -u 参数,使得python不启用缓冲。
    nohup python -u xxx.py > xxx.log 2>&1 &

    这样就可以看到日志文件及时更新了。

    展开全文
  • nohup /home/hu/projects/remap64/bin/demlinux.out 11 /home/hu/gt/N36E116/ /home/hu/gt/out1 /home/hu/gt/out1/base 2>&1 >demlog.log & >覆盖,>... 将任务放到后台运行 --...

    nohup /home/hu/projects/remap64/bin/demlinux.out 11  /home/hu/gt/N36E116/   /home/hu/gt/out1  /home/hu/gt/out1/base 2>&1 >demlog.log &

    >覆盖,>>追加
    2>&1 表示不仅命令行正常的输出保存到app.log中,产生错误信息的输出也保存到app.log文件中;

    &

    & 将任务放到后台运行

    -------

    Shell可以将标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)重定向为文件。也就是说,任何命令都可以用shell的“<”操作符将输入数据来源从stdin重定向为文件,比如:
    $ mycommand < infile

    同样,任何命令都可以将数据输出的目的地从stdout重定向为文件。
    $ mycommand  > outfile       //创建或覆盖outfile
    $ mycommand  >> outfile    //附加到outfile原有内容的末尾

    一个命令也能够将stderr重定向到文件,同时仍然将写入标准输出的内容打印在屏幕上:
    $ mycommand  2> errorfile
    下面的命令将stdout及stderr都重定向到文件:

    $ mycommand  > outfile  2> errorfile //输出到不同文件
    $ mycommand  >& outfile                 //输出到一个文件

    ------

    ps -ef | grep uname

    pkill dout.out

    -------

    查看进程
    ps  列出进程。
    uptime   查看系统负载。
    w  列出所有用户的活动进程。
    top   监视进程资源占用情况。
    gnome-system-monitor  监视系统负载和进程的图形化工具。
    xload   监视系统负载情况的简单图形化工具。
    free   显示可用内存情况。

    进程(process)是Linux系统的工作单位。所运行的每个程序都会引发一个或多个进程。Linux提供了一些命令用于查看、操作这些进程。每个进程都以一个独有的数字代码标示,称作进程ID或PID。
    进程与任务(参看第32页“Shell任务控制”)不同:进程是操作系统的一部分,任务却是更高层的结构,仅由其所在的shell控制。运行中的程序包含一个或多个进程;而任务包含一个或多个由shell命令执行的程序。
    ps  stdin stdout -file --opt --help --versionps [options]
    ps命令显示正在运行的进程信息,也可显示其他用户的进程。
    $ ps

     ps
      PID    TTY          TIME       CMD
     4706    pts/2        00:00:01   bash
    15007    pts/2        00:00:00   emacs
    16729    pts/2        00:00:00   ps

    ps至少有80个选项,这里只讨论其中几个最有用的组合。如果你觉得选项名看起来杂乱无章,那是因为ps命令(GNU ps)刻意集成了一些其他Unix系统的ps命令的功能,试图兼容其他系统。
    查看自己的进程:
    $ ps -ux

    查看用户smith的所有进程:
    $ ps -U smith

    查看特定程序引发的所有进程:
    $ ps -C program_name

    查看终端N的进程:
    $ ps -tN

    查看特定进程1,2及3505:
    $ ps -p1,2,3505

    对所有进程连同命令行,截断其超出屏幕宽度的部分:
    $ ps -ef

    所有进程连同完整的命令行:

    $ ps -efww

    以缩排方式呈现所有进程的层次关系:
    $ ps -efH

    记住,可以用grep或其他过滤程序从ps的输出中提取特定的信息。
    $ ps -ux | grep myprogram

    uptime  stdin stdout -file --opt --help --versionuptime
    uptime命令用于显示自上次启动后,系统运行了多长时间。
    $ uptime

    10:54pm up 8 days, 3:44, 3 users, load average: 0.89, 1.00, 2.15

    自左至右,各字段的意义分别为:当前时间(10:54pm),系统运行时间(8 days,3hours,44minutes),当前登录的用户数(3),1分钟系统平均负载(0.89),5分钟系统平均负载(1.00),15分钟系统平均负载(2.15)。平均负载是单位时间段内活动进程的平均数。
    w  stdin stdout -file --opt --help --versionw [username]
    w命令用于显示每个已登录用户的每个shell的当前进程:
    $ w
      10:51pm up 8 days, 3:42, 8 users,

    load average: 0.00, 0.00, 0.00
    USER     TTY    FROM  LOGIN@  IDLE   JCPU   PCPU   WHAT
    barrett  pts/0  :0    Sat2pm  27:13m 0.07s  0.07s  emacs
    jones    pts/1  host1 6Sep03  2:33m  0.74s  0.21s  bash
    smith    pts/2  host2 6Sep03  0.00s  13.35s 0.04s  w

    第一行是uptime显示的。其后是各栏信息的标题,分别代表登录用户名、用户终端、源主机或X界面(如有)、登录时间、挂起时间、两种CPU时间的测量值(详情请参阅man w)和当前进程。如果只想看特定用户的信息,请为w提供该用户名。
    如果需要精简的输出,试试w-hfs。
    常用选项
    -h  不显示标题行。

    -f  不显示FROM字段。
    -s  不显示JCPU列和PCPU字段。
    top  stdin stdout -file --opt --help --versiontop [options]
    top命令用于监视最活跃的进程,并自动更新显示(比如每秒更新一次)。top是一个交互式的命令行程序,可以在屏幕上更新自己的显示。
    $ top
    94 processes: 81 sleeping, 1 running, 0 zombie, 11 stopped
    CPU states: 1.1% user, 0.5% system, 0.0% nice, 4.5% idle
    Mem: 523812K av, 502328K used, 21484K free, 0K shrd, ...

    -dN  每N秒更新一次显示。
    -pN-pM…  只显示PID为N,M,…(最多20个)的进程。
    -c  显示进程的命令行参数。
    -b  直接在标准输出上显示,不进行屏幕控制。可以使用top-b-n1>outfile将画面快照保存到文件中。
    gnome-system-monitor stdin stdout-file--opt--help--versiongnome-system-monitor
    gnome-system-monitor是一个图形工具,用于显示每个进程的系统负载、活动进程列表、存储器信息、文件系统信息及其他信息。

    xload  stdin stdout -file --opt --help --versionxload
    xload是X window环境下一个简单的监视工具,能够显示处理器负载(Y轴)与时间(X轴)的关系。如果你的系统是多处理器或多核的,xload将不能为每个处理器或核进行单独显示,只能使用更为强大的工具,诸如gnome-system-monitor等。
    常用选项
    -update N  每N秒更新一次显示(默认为10秒)。
    -scale N  将Y轴N等分(默认为1)。负载增加时,xload将自动增加更多的划分。
    -hl color  比例划分线以color颜色显示。
    -label X  在图片上打印X字符串(默认为你的主机名)。

    Linux内核尽可能地将内存用作缓存区,因此上述例子中,估计的空闲内存包含buffers/cache行,free栏(如,299000K)。
    常用选项
    -s N  连续运行,每N秒更新一次显示。
    -b  以字节为单位显示。
    -m  以兆字节为单位显示。
    -t  在最后新增行显示总的统计信息。
    -o  不显示“buffers/cache”行。

    进程控制
    kill  终止进程(或传送信号到某进程)。
    nice  以特定的优先级启动程序。
    renice  进程运行过程中改变其优先级。
    进程启动后,可以被停止、重启、终止或者改变优先级。在第32页“shell任务控制”中已经讨论过部分操作,这里将讨论终止和改变优先级操作。
    kill  stdin stdout -file --opt --help --versionkill [options] [process_ids]
    kill命令可以发送信号给进程,可以终止(terminate)(默认操作)、中断(interrupt)、

    $ ps -uax | grep emacs

    或者,更好的方法是试试pidof命令,它依据进程的名字查找并打印出该进程的PID:
    $ pidof  emacs
    8374

    现在,你即使只知道进程的名字,也可以在一条命令行中结束该进程:
    $ kill `pidof emacs`

    除了位于文件系统中的kill程序外(通常是/bin/kill),许多shell也内置kill命令,虽然两者语法和行为不尽相同。但两者都支持以下用法:
    $ kill -N PID
    $ kill -NAME PID

    上面N是信号的数值,NAME是不含前缀“SIG”的信号名(比如,使用-HUP发送SIGHUP信号)。运行kill-l命令可以查看kill发送信号的完整列表。它的输出取决于是shell内置的kill,还是文件系统中的kill程序。
    关于各种信号的说明,请参阅man 7 signal。
    nice  stdin stdout -file --opt --help --versionnice [-level] command_line
    当启动一个需要占用大量系统资源的程序时,你可以通过降低它的优先级,达到“善待”其他进程(或用户)的目的。nice命令的作用是为进程设置一个nice值(nice level),以便减少Linux进程调度器对它的关注。下面例子中,要求系统以优先级7来排序一个超大文件:
    $ nice -7 sort VeryLargeFile > outfile

    如果运行nice命令时没有指定优先级,则默认为10级。通常进程运行在0级,你可以通过运行不带参数的nice命令查看:
    $ nice
    0

    superuser也可以降低nice级别,提升进程的优先级:
     # nice --10 myprogram

    (没错,这是“dash负10”。)可以通过ps命令输出的“NI”列查看任务的nice级别:
    $ ps -o pid,user,args,nice

    renice  stdin stdout -file --opt --help --version

    renice [+-N] [options]PID
    nice命令可以让你按指定的优先级启动程序,而renice命令可以改变正在运行的进程的优先级。
    下面的例子中,进程28734的nice级别增加(优先级降低)了5级:
    $ renice +5 -p 28734

    普通用户可以增加自己的进程nice级别,只有superuser可以降低(增加优先级)进程nice级别,并且可以对所有进程进行操作。级别的可用范围是−20至+20,但是要避免太小的负值,以免干扰关键的系统进程。
    常用选项
    -p pid  只影响给定PID的进程。也可以省略-p,只提供PID(如,renice+528734)。

    -u username  影响给定用户的所有进程。这称为“优化”进程。也许你听过把它当做动词的说法:“进程优先级优化到12。”返回

     

     

    Shell任务控制
    jobs 列出所有运行的任务

    & 将任务放到后台运行
    ^Z 暂停当前(前台)任务
    suspend 暂停shell
    fg 恢复任务,前台运行该任务
    bg 将已暂停的任务放到后台运行
    所有Linux的shell都具备任务控制的能力,即有能力在后台(后台多任务运行)或前台(实时现场)运行程序。任务只是shell的工作单位。交互运行命令时,shell将其视为任务,并进行记录。命令结束时,相关任务也就结束了。任务是比Linux进程更高一层次的概念。事实上,Linux OS对任务一无所知,任务仅是由shell进行控制的。

    关于任务控制的几个重要术语介绍如下:

    前台任务(Foreground job)
    在shell中运行,任务完成前shell提示符不会出现,因而不能同时运行其他任务。后台任务(Background job)
    在shell中运行,但不独占shell,任务完成前shell提示符就能出现,因而可以在同一个shell下同时运行其他任务。暂停(Suspend)
    临时停止执行前台任务。恢复(Resume)
    让暂停的任务继续执行。

    jobs
    内置命令jobs用于列出shell中正在运行的任务。
    $ jobs
    [1]- Running                emacs  myfile  &
    [2]+ Stopped                su

    左侧的数字是任务编号,+表示该任务默认是受fg(foreground,前台)和bg(background,后台)命令影响的。
    &
    命令行末尾加上&符号,表示要求shell将该命令放到后台执行。
    $ emacs  myfile  &

    [2] 28090

    shell运行命令后,输出任务编号2和命令的进程ID:28090。然后立刻输出提示符,不管后台任务是否执行完毕。
    ^Z
    前台任务正在运行时,按下^Z,该任务将被挂起。挂起的任务只是暂停运行,但是其状态会被继续记录。
    $ mybigprogram
    ^Z
    [1]+         Stopped                 mybigprogram
    $

    对于已挂起的任务mybigprogram,可以通过bg命令将其放到后台继续执行,也可以使用fg命令将其恢复到前台继续执行。
    suspend
    内置命令suspend的作用是暂停shell,就像对shell本身按下了^Z一样。例如,运行su命令进入另一个shell后,想回到原来的shell中,则可以运行以下命令:
    $ whoami
    smith
    $ su  -l
    Password: **************
    # whoami
    root

    # suspend
    [1]+         Stopped                 su
    $ whoami
    smith

    bgbg [%jobnumber]
    内置命令bg的作用是将挂起的任务放到后台运行。bg命令没有指定参数时,只对最近被挂起的任务起作用。要影响其他某个特定的任务时(可以通过命令jobs列出任务的详细参数),可以在该任务编号前加上百分号,比如:
    $ bg         %2

    某些交互式任务不能保持在后台运行,比如正在等待输入数据的任务。如果你尝试将其放到后台,shell将暂停该任务并显示:
    [2]+         Stopped  command  line  here

    这时候可用fg将任务放到前台继续运行。
    fgfg [%jobnumber]
    内置命令fg的作用是将挂起或后台运行的任务放到前台运行。没有指定参数时,fg将自动选择一个任务,通常是最近挂起的任务或者最近放到后台运行的任务。要影响其他某个特定的任务时(可以通过命令jobs列出任务的详细参数),可在该任务编号前加上百分号,比如:
    $ fg         %2

     

    结束运行中的命令
    如果你在shell中启动了一个命令,但是随后希望能立即停止该命令,这时可以按^C。shell会将^C解读为“立即终止当前的前台命令”。因此,在浏览非常长的文件(比如使用cat命令)过程中,可以按^C停止显示:
    $ cat  bigfile
    This is a very long file with many lines. Blah  blah  blah
    blah  blah  blah  blah blah blah  ^C
    $

    要终止后台运行的程序,可以先用fg命令将其放到前台,然后再按下^C;或者,使用kill命令终止它运行(参见第117页“进程控制”)。
    通过按^C来终止程序是一种不太友好的方式。如果程序自身有退出的方法,那就应该尽可能

    通过按^C来终止程序是一种不太友好的方式。如果程序自身有退出的方法,那就应该尽可能去使用。
    程序终止之后的清理
    使用^C终止程序可能会使shell处于一种奇怪的状态,比如屏幕显示的不是你输入的字符,而是其他的东西。这是由于程序被终止后,没有机会清理自身。发生这种现象时,可以按以下步骤解决问题:
    1.按^J使shell输出提示符。这和Enter键(换行)的作用一样,但在Enter键失效时还可以使用。
    2.输入reset命令(即使在你输入时它没有显示,也照样输入),然后再次按下^J,运行该命令。这将让shell回到正常状态。
    ^C仅在shell环境下才起作用,非shell窗口内按^C是不起作用的。而且,有些程序会拦截^C并忽略,比如文本编辑器emacs。

    结束shell
    终止shell运行的方法有两个:执行exit命令或按^D:
    $ exit

    配置shell
    为了使shell按照某种特定方式运行,需要对用户目录下的.bash_profile文件和.bashrc文件进行配置。这两个文件都是shell脚本程序(即包含shell命令的可执行文件,详见第187页“shell脚本编程”),每次你登录到系统时,~/.bash_profile都会自动执行;当shell被打开时,~/.bashrc也会自动执行。在这两个文件中,你可以设置变量和别名、运行程序、输出你的星座,或者其他任何你想做的事情。
    以上是对Linux和shell的总体介绍,后面的内容将转入Linux命令,会罗列并解释最常用的那些命令,包括文件操作、进程管理、用户操作、网络、多媒体等相关的命令。

     

    展开全文
  • 实际开发时,会常常有需要运行很长时间的python程序,这时最佳策略就是将它放在linux服务器后台运行,并且及时更新消息。 2.方法 1).基础命令 nohup python -u xxx.py > xxx.log 2>&1 & xxx.py为待...

    1.概述

    实际开发时,会常常有需要运行很长时间的python程序,这时最佳策略就是将它放在linux服务器后台运行,并且及时更新消息。

    2.方法

    1).基础命令

    nohup python -u xxx.py > xxx.log 2>&1 & 
    
    • xxx.py为待运行的python程序
    • xxx.log为日志文件,所有python程序运行时出现的错误信息,打印信息等,都会录入到其中
    • -u表示强制其标准输出(print),和标准错误一样不通过缓存直接打印到屏幕。
    • 2>&1 表示将错误输出转换为标准输出
    • 最后一个& 表示后台运行
    • ‘>’ 表示打印信息的写入

    2).其他
    只记录错误信息

    nohup python -u xxx.py >/dev/null 2>error.log  2>&1 &
    

    不记录

    nohup python -u xxx.py >/dev/null  2>&1 &
    

    3.停止运行

    1)

    ps -ef | grep python
    
    • ps:进程查看命令.运用该命令可以确定运行的状态、 进程是否结束、进程有没有僵死、等
    • -e:显示所有进程
    • -f:全格式
    • grep:基于正则的文本搜索,所以grep python就实现了在所有进程中正则搜索出python相关进程

    2)
    上述命令获取python进程号,然后使用:

    kill xxx xxx
    

    来停止进程,相关日志可以用vim打开去查看。

    展开全文
  • Linux 后台运行我们常常会用终端连接Linux服务器,然后在运行类似Tomcat 、Web Logic等 web容器的时候希望退出终端依然可以运行。我们可以通过 nohup command & 来使程序后台运以Tomcat为例nohup ./startup.sh &...

    Linux 后台运行

    我们常常会用终端连接Linux服务器,然后在运行类似Tomcat 、Web Logic等 web容器的时候希望退出终端依然可以运行。

    我们可以通过 nohup command & 来使程序后台运

    以Tomcat为例nohup ./startup.sh &

    然后在shell中提示了nohup成功后:

    nohup: ignoring input and appending output to ‘nohup.out’

    然后按键盘任意键,回到shell输入命令窗口,然后在shell中输入

    exit

    退出终端,这时候,你的Tomcat就作为后台服务挂在Linux上了。

    注意:不要执行完nohup直接点击关闭程序关闭终端,这样会干掉该命令的session,导致nohup对应的进程被通知一起被干掉,从而导致后台运行失败。

    上文提到过nohup成功后的提示:nohup: ignoring input and appending output to ‘nohup.out’

    默认情况下nohup的作业的所有输出会被重定向到 nohup.out这个文件中,当然,你也可以指定输出:

    nohup command > vienout.txt 2>&1 &

    由于使用nohup时,会自动将输出写入nohup.out文件中,如果文件很大的话,nohup.out就会不停的增大,我们可以利用Linux下一个特殊的文件/dev/null来解决这个问题,这个文件就相当于一个黑洞,任何输出到这个文件的东西都将消失

    只保留输出错误信息 nohup command >/dev/null 2>log &

    所有信息都不要 nohup command >/dev/null 2>&1 &

    这里解释一下后面的2>&1 。 这涉及到Linux的重定向,其中0、1、2分别是标准输入、标准输出、标准错误输出,用来指定需要重定向的标准输入输出。默认情况下是标出输出,也就是1 。例如我们而上文提到的 2>&1 是 将错误信息重定向到标准输出。

    还有就是如果不想让程序输出,Linux下有一个/dev/null的特殊文件,就像一个黑洞,所有输出到这个文件的信息全部会消失,如果你不需要输出日志,这样做就不会导致输出日志文件越来越大,占用存储空间的问题了

    关于Linux,新手想继续了解一些知识的话,推荐看一下《鸟哥的Linux私房菜》,讲的简单易懂,适合入门和作为工具书平时查阅

    附:

    ctrl+c #结束当前任务

    ctrl+z #挂起当前任务

    jobs -l #查看任务,返回任务编号 和 进程号

    bg %n #编号n的任务转向后台运行,实际上bg n 也可以

    fg %n #编号n的任务转向前台运行

    转载请注明来源:

    viencoding.com版权所有,允许转载,但转载请注明出处和原文链接: https://viencoding.com/article/52

    欢迎小伙伴们在下方评论区留言 ~ O(∩_∩)O

    展开全文
  • Linux后台运行python程序,并输出日志文件

    万次阅读 多人点赞 2019-04-26 11:40:59
    策略:后台运行程序,然后把打印信息保存在指定的文件中,等程序运行结束后,再检查输出日志或者实时观察日志。 1、启动命令: 1、一般使用 nohup python -u Job.py > log.log 2>&1 & 2、只记录...
  • 本篇主要介绍了inux后台运行和关闭、查看后台任务,详细的介绍了fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令这些命令,有兴趣的可以了解一下。
  • 后台运行命令:nohup nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令忽略所有挂断(SIGHUP)信号,可以在你退出帐户/关闭终端之后继续运行相应的进程...
  • 后台运行python程序并标准输出到文件 现在有test.py程序要后台部署, 里面有输出内容 使用命令: nohup python -u test.py > test.log 2>&1 & 最后的&表示后台运行 2 输出错误信息到提示符...
  • 本篇文章就是来介绍如何在Linux相关系统上运行Python程序 1. 脚本执行 1.1 直接启动 介绍的第一种方式呢就比较简单粗暴。这种方式如果使用 ctrl+c ,程序就会终止了 如果运行的python脚本执行时间较快,可以使用...
  • 1.启动程序并输入到指定日志nohup python manage.py runserver 0.0.0.0:9090 > /data/zyj/xadstat/xadstat.log 2&>1 &或者nohup python manage.py runserver 0.0.0.0:800 >> run.log 2>&...
  • Linux服务器后台运行Python nohup python -u test.py > test.log 2>&1 & 最后的&表示后台运行 >表示日志输出重定向 Linux默认定义两个变量:1和2 2 错误输出 1 标准输出 cmd 1>info.log ...
  • linux 后台运行程序 查看运行输出

    千次阅读 2019-12-02 13:05:14
    1、 Linux下从一个终端获取另一个终端正在运行的程序的输出内容的方法: reptyr <PID> 具体安装: 使用reptyr Ubuntu下,直接sudo apt-get install reptyr安装即可 使用方法就是 reptyr <PID> 比如你...
  • 用Xshell连接服务器,打算在服务器上后台运行,但是一旦会话连接断开,代码也会结束执行。 使用 nohup 命令挂起服务并输出日志 nohup python -u test.py > out.log 2>&1 & nohup sh **.sh > /dev/...
  • Linux后台运行

    2016-08-17 08:49:00
    关于linux后台 1 ctrl + z 2 jobs -l 3 fg %jobnumber 后台调前台 4 bg %jobnumber 后台暂停--后台运行 5 kill pid 6 ps -aux | grep "test.sh" 显示所有相关进程 7 只输出错误信息到日志文件 8 ...
  • Linux后台运行jar包

    千次阅读 2018-04-16 17:59:07
    摘要:在linux运行java项目,需要把java打成jar包扔到linux环境中,然后通过命令运行该jar包linux运行jar分两种情况:一、临时性:当退出与linux的连接后,运行任务中断;二、永久性:将运行项目的任务放入进程,...
  • LInux后台执行java日志分天打印: LInux后台执行java日志分天打印: nohup java -jar app_name.jar >> /home/log/app_name-$(date +%Y-%m-%d).log 2>&1 &

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 66,259
精华内容 26,503
关键字:

linux后台运行输出日志

linux 订阅