使用nohup后台执行处理遇到的问题

情景如下:

       当我使用nohup后台执行一个python文件,并将日志存储到指定目录。在我的Python文件中,其中调用系统命令os.system(‘sh xxxx.sh’)来执行一个脚本文件。(sh xxxx.sh最好为绝对路径)

在这里遇到了一个问题!!!!!当我的xxxx.sh文件执行失败时,其中的输出是不会打印到日志中的,又因为我在这里吃掉了异常,所以会继续往下执行,但是日志不会出现任何错误。当我尝试将 sh xxxx.sh复制到命令行窗口下执行,反而出现了shell脚本中的错误。一开始我认为是os.system('sh xxxx.sh')没有执行,所以没有关注这个错误的原因,反而是产生的错误迷惑了我,让我以为这个shell脚本失败也一定会产生输出,所以就一直纠结于os.system('sh xxxx.sh')为什么会不执行的原因上。所以浪费了很多时间去查找一个不存在的错误。

错误原因:nohup启动Python文件的情况,不会输出Python文件中调用的shell(或者其他文件)中的输出。(这里还有个问题就是,pycharm会输出shell中的输出,所以这更加加深了我对于os.system('sh xxxx.sh'没有执行的误解。。。)

xxxx.sh 详细代码如下:

#!/bin/bash
filepath="/home/xxxx/clock.py"  # py文件位置

start(){
    nohup python3 $filepath >/home/wangfang/clock.log 2>&1 &
    if [ $? -eq 0 ]; then
        echo 'clock.py service start OK'
    else
        echo "clock.py service start failed"
    fi
}

stop(){
    serverpid=`ps -aux|grep "$filepath"|grep -v grep|awk '{print $2}'`
    kill -9 $serverpid
    if [ $? -eq 0 ]; then
        echo 'clock.py service stop OK'
    else
        echo "clock.py service stop failed"
    fi
}

restart(){
    stop
    start
}

status(){
    if [ -e $filepath ];then
        echo "$0 service start"
    else
        echo "$0 service stop"
    fi
}


case $1 in
    start)
    start
    ;;
    stop)
    stop
    ;;
    restart)
    restart
    ;;
    *)
    start
esac
exit 0

 

你可能感兴趣的:(shell,linux)