我有一个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
但是我看不到要写入日志文件的任何内容。
不知道出了什么问题。任何指导我正确方向的建议都将受到高度赞赏。
答案 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
我试图重现您的情况,如下所示:
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)
在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将没有内容。