用于在服务器上运行 Python PFA 的 Screen 会话在几天后终止

用于在服务器上运行 Python PFA 的 Screen 会话在几天后终止

我正在运行一个基于 Python 的 PFA 脚本,该脚本基本上每小时编写一次电子表格。它运行良好。我在 Putty 上使用 SSH 访问我的服务器,因此我使用屏幕会话在后台运行脚本。它运行良好几天,然后突然死机。现在,它连续运行了 6 天,然后死机了。在 Digital Ocean 上使用 Ubuntu 16.04.2 LTS (Xenial)。

我用了 -

屏幕python we.py

我尝试寻找是否有东西可以帮助我这里。我是否需要使用 -S 为屏幕指定任何名称以避免这种情况?或者我是否必须每天使用 -x 或 -p 重新连接它以使其保持活动状态?

答案1

有两种方法可以解决您的问题:

将任务作为 systemd 服务运行

这听起来像是一项长期运行的任务,实际上应该是一个在启动时启动的服务,在失败时由 init 系统重新启动,并且应该有适当的日志记录到 journald。

为实现此目的,请按照下列步骤操作:

创建一个文件/lib/systemd/system/python-we.service并插入以下内容:

[Unit]
Description=Python We Job
After=network-online.target

[Service]
Type=simple
Restart=on-failure
RestartSec=10

ExecStart=/usr/bin/python /full/path/to/we.py

# Make sure stderr/stdout is captured in the systemd journal.
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

创建文件后,运行以下命令将该python-we.service文件注册到 systemd,启用它(使其在重启后启动)并最终启动它。

systemctl daemon-reload
systemctl enable python-we
systemctl start python-we

如果您使用 systemd,您可以通过 读取日志journalctl -u python-we

在屏幕上运行(不推荐)

启动一个屏幕会话(只需输入screen),然后在该屏幕会话中启动您的作业。这样,只有当您关闭屏幕会话内的 shell 时,屏幕会话才会存在,并且您可以观察屏幕会话内的日志。

正如我所说:这不是运行服务的推荐方式,因为它有点不安全。您的屏幕会话将膨胀,并且服务在发生故障时不会自动重新启动。

答案2

您在屏幕中运行的程序可能正在退出,当发生这种情况时,会话将关闭,并且您将丢失所有控制台输出和状态代码。

如果您确实想继续使用屏幕,我建议您在断开与屏幕的连接之前按下 来记录会话ctrl-ashift-hscreenlog.0在工作目录中创建一个名为 的文件,其中包含所有控制台输出,希望它可以告诉您程序退出的原因。

相关内容