我有一个启用了日志记录的 Python 3 脚本(用于调试目的)。每当我运行/执行此脚本时,它都运行良好,并且会创建日志文件。
我还创建了一个 setup.sh-bash 脚本来下载和安装我的应用程序。然后它会自动使用以下命令启动脚本:禁止,以便让它在后台运行。此命令后面跟着 > /dev/null 2>&1 &,因此它不会向控制台输出任何内容。但是,这会使 Python 的日志记录模块“出错”,因为它无法再向日志文件输出任何内容。如果我没记错的话,它会输出到 /dev/null。
我在网上搜索以找到解决方案,但每次尝试都失败了。我希望有人能对此提出一个想法。也许我应该使用其他方法让我的脚本永远运行(当然直到重新启动 :)),可以使用 Python 3 日志记录模块,并且控制台中没有输出。
我用来启动脚本的确切命令如下:
su -l -s /bin/bash scriptuser -c 'nohup python3 '/etc/scriptroot/main.py > /dev/null 2>&1 &'
提前致谢
答案1
我很“抱歉”地说,现在我自己找到了解决方案。看来我挖得不够深。我现在使用大多数 UNIX 系统支持的 daemon-start-stop,它工作正常。
我按照互联网上的教程进行操作,可以在这里找到:http://blog.scphillips.com/2013/07/getting-a-python-script-to-run-in-the-background-as-a-service-on-boot/
我希望这可以帮助很多遇到同样问题/寻找同样答案的其他用户。
谢谢阅读。
答案2
此问题是由于 Python stdout 被行缓冲所致。如果您使用 -u 标志运行该命令,它将使用无缓冲的 stdout 和 stderr:
su -l -s /bin/bash scriptuser -c 'nohup python3 -u '/etc/scriptroot/main.py > /dev/null 2>&1 &'