![用于在服务器上运行 Python PFA 的 Screen 会话在几天后终止](https://linux22.com/image/896245/%E7%94%A8%E4%BA%8E%E5%9C%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E8%BF%90%E8%A1%8C%20Python%20PFA%20%E7%9A%84%20Screen%20%E4%BC%9A%E8%AF%9D%E5%9C%A8%E5%87%A0%E5%A4%A9%E5%90%8E%E7%BB%88%E6%AD%A2.png)
我正在运行一个基于 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-a
。shift-h
将screenlog.0
在工作目录中创建一个名为 的文件,其中包含所有控制台输出,希望它可以告诉您程序退出的原因。