我有简单的Python脚本,可以作为守护进程使用.我正在尝试创建systemd脚本,以便能够在启动期间启动此脚本.
当前的systemd脚本:
[Unit]
Description=Text
After=syslog.target
[Service]
Type=forking
User=node
Group=node
WorkingDirectory=/home/node/Node/
PIDFile=/var/run/zebra.pid
ExecStart=/home/node/Node/node.py
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
node.py:
if __name__ == '__main__':
with daemon.DaemonContext():
check = Node()
check.run()
Run Code Online (Sandbox Code Playgroud)
run包含while True循环.
我尝试运行此服务systemctl start zebra-node.service.不幸的是服务从未完成陈述序列 - 我必须按Ctrl + C. 脚本正在运行,但状态正在激活,一段时间后它将更改为停用状态.现在我正在使用python-daemon(但在没有它尝试之前,症状相似).
我应该为我的脚本实现一些额外的功能还是systemd文件不正确?
我想在CENTOS服务器中运行python脚本:
#!/usr/bin/env python
import socket
try:
import thread
except ImportError:
import _thread as thread #Py3K changed it.
class Polserv(object):
def __init__(self):
self.numthreads = 0
self.tidcount = 0
self.port = 843
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind(('100.100.100.100', self.port))
self.sock.listen(5)
def run(self):
while True:
thread.start_new_thread(self.handle, self.sock.accept())
def handle(self,conn,addr):
self.numthreads += 1
self.tidcount += 1
tid=self.tidcount
while True:
data=conn.recv(2048)
if not data:
conn.close()
self.numthreads-=1
break
#if "<policy-file-request/>\0" in data:
conn.sendall(b"<?xml version='1.0'?><cross-domain-policy><allow-access-from domain='*' to-ports='*'/></cross-domain-policy>")
conn.close()
self.numthreads-=1
break
#conn.sendall(b"[#%d (%d running)] %s" % …Run Code Online (Sandbox Code Playgroud) 是否可以在Web服务器上运行Python脚本作为后台服务?我想这样做用于套接字通信.
我正在尝试通过重新启动使我的Python App工作的两个进程来完成远程部署.像这样
process-one &
process-two &
Run Code Online (Sandbox Code Playgroud)
我试过这样做"执行一个Shell脚本"
ssh -i ~/.ssh/id_... user@xxx.xxx ./startup.sh
Run Code Online (Sandbox Code Playgroud)
我尝试过使用Jekins SSH插件和发布SSH插件并做同样的事情.所有前面的步骤,停止进程,重新启动其他服务,拉入新代码工作正常.但是当我到达我开始服务的那一部分时.它执行这两行,并且插件或默认脚本执行都不能脱离服务器.它们都会挂起,直到我重新启动Jekins或者在发布通过SSH插件的情况下超时.所以我的构建需要重启Jenkins,或者标记为不稳定.
有没有人做过类似的事情?我试过了
nohup process-one &
Run Code Online (Sandbox Code Playgroud)
但同样的事情发生了.并不是说服务也搞乱了,因为它们实际上是正常启动的,只是Jenkins似乎并不理解这一点.
任何帮助将不胜感激.谢谢.
我按照本教程构建了一个非常简单的Telegram机器人.所以我有一个包含Python代码的文件,当我运行该代码时,机器人将回应我说的话.
机器人只有在我打开Python并运行代码时才能正常工作吗?这是否意味着我不能同时在Python中运行任何其他脚本,如果我希望我的机器人继续工作,也不能关闭Python?
有没有办法绕过这个,所以机器人将永远"开启"?
我有一个 python3.9 脚本,我想 24/7 运行。在其中,我使用python-daemon来保持它的运行,如下所示:
import daemon
with daemon.DaemonContext():
%%script%%
Run Code Online (Sandbox Code Playgroud)
它工作正常,但几个小时或几天后,它就会随机崩溃。我总是以以下方式启动它,sudo但我似乎无法弄清楚在哪里可以找到用于调试的守护进程进程的日志文件。我可以做什么来确保日志记录?如何让脚本保持运行或在崩溃后自动重新启动它?
您可以在此处找到完整的代码。
我是 python 新手,对 Linux 有相当基本的了解。
我需要在 Ubuntu 14.04.3 服务器上启动时启动一个脚本。
唯一的问题是,脚本是一个监控工具,应该一直运行,所以我不能只是定期进行 cron 调用。
我一开始发现了这个:用 cron 运行 python 脚本
我试图在 crontab 中添加这个:
@reboot python /path/to/script.py &
Run Code Online (Sandbox Code Playgroud)
还有这个:
@reboot /path/to/script.py &
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用。
我也看到了这个:如何使 python 脚本像 linux 中的服务或守护程序一样运行
主要答案是cron或 python 代码中的更改。
所以我的问题是:有没有另一种方法可以在启动时运行我的脚本并让它“永远”运行而不更改代码?
我向你保证,如果我不想更改代码,那不是因为懒惰,但如果这是唯一的选择,我会这样做。
其他信息(不知道是否有必要),我正在运行 Windows 并且可以通过 PuTTY 访问服务器。Python的版本是2.7
更新
这是 cron 日志:
Nov 27 15:57:03 trustyovh cron[760]: (CRON) INFO (pidfile fd = 3)
Nov 27 15:57:03 trustyovh cron[798]: (CRON) STARTUP (fork ok)
Nov 27 15:57:03 trustyovh cron[798]: (CRON) INFO …Run Code Online (Sandbox Code Playgroud) python ×6
centos ×2
linux ×2
jenkins ×1
python-2.7 ×1
python-3.x ×1
sockets ×1
systemd ×1
telegram-bot ×1
web-services ×1
webserver ×1