Bash脚本未在Nohup的后台运行

时间:2018-10-09 20:55:24

标签: python linux bash background-process nohup

我有一个bash脚本,可以激活anaconda环境并运行python调度程序脚本,并每分钟将日志写入文件中。如果我只运行脚本,那就很好用。

[user@host proj]$ test.sh

执行ctrl-C后,我看到日志每分钟都传来。

[user@host proj]$ cat logs/log.log
Test job 1 executed at : 2018-10-09 14:16:00.000787
Test job 1 executed at : 2018-10-09 14:17:00.001890
Test job 1 executed at : 2018-10-09 14:18:00.001861

但是当我使用nohup在后台运行相同的脚本

[user@host proj]$ nohup test.sh &
[1] 24884
[user@host proj]$ nohup: ignoring input and appending output to ‘nohup.out’

我可以从顶部看到脚本和python正在运行

24949 user  20   0  113172   1444   1216 S  0.0  0.0   0:00.00 test.sh
24952 user  20   0  516332  66644  17344 S  0.0  0.8   0:00.65 python

但是我看不到要写入日志文件的任何内容。

不知道出了什么问题。任何指导我正确方向的建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

我假设proj目录位于您的PATH变量中。

如果nohup.out中没有打印任何内容,那么我认为您没有任何内容可以回显到nohup.out文件中。尝试在您的shebang行下方使用set -xv,即如果使用bash,请使用#/bin/bash。现在,运行shell脚本时,nohup将至少有一个从shell脚本运行的python脚本条目,如下所示。

user @ host:〜/ scripts $ cat nohup.out

python /home/madbala/scripts/append_file.py + python /home/madbala/scripts/append_file.py

我试图重现您的情况,如下所示:

  1. Python脚本名称(对不起,但我对python不太了解):append_file.py

    #!/usr/bin/python
    from datetime import datetime
    import time
    with open("test.txt", "a") as myfile:
       for x in range(15):
          myfile.write('appended text %s \n' %datetime.now())
          time.sleep(2)
    
  2. 在python脚本之上调用的Shell脚本:run_py_script.sh

      #!/bin/bash
      set -xv
      python /home/madbala/scripts/append_file.py
    

现在,在运行nohup run_py_script.sh &时,我会得到set -xv的输出(实际上可以在shell脚本中启用详细日志记录-您也可以只使用set -x)。

当我使用set -xv注释掉#set -xv时,nohup.out将没有内容。

Screenshot