在 linux 启动期间自动启动和停止 APScheduler?
Automatic start and stop of APScheduler during boot of linux?
如何在 Linux 启动期间自动启动和停止 Python APScheduler(我的情况是 Centos),并在关机期间停止它?
我可以在 linux 的启动过程中启动 python 脚本,但如何停止它? (还记得 PID 吗?)
而且我想知道这是否可行,因为我想要一个简单的部署,这样开发人员就可以轻松更新 test/production 中的文件并重新启动调度程序,而无需成为 root 这样的他们可以 start/stop 服务。
目前我有调度器 started/stopped 通过使用 tmux,这是有效的,但我似乎找不到一个好的方法来改进它,以便在服务器期间 start/stop 它会自动 started/stopped 并在部署期间轻松更新 :(
通常创建一个扩展名为.pid 的文件来保存进程PID。
然后你需要注册一个信号处理程序来干净地退出,并确保在退出时删除.pid文件。
例如:
#!/usr/bin/env python
import signal
import atexit
import os
PID_FILE_PATH = "program.pid"
stop = False
def create_pid_file():
# this creates a file called program.pid
with open(PID_FILE_PATH, "w") as fhandler:
# and stores the PID in it
fhandler.write(str(os.getpid()))
def sigint_handler(signum, frame):
print("Cleanly exiting")
global stop
# this will break the main loop
stop = True
def exit_handler():
# delete PID file
os.unlink(PID_FILE_PATH)
def main():
create_pid_file()
# this makes exit_handler to be called automatically when the program exists
atexit.register(exit_handler)
# this makes sigint_handler to be called when a signal SIGTERM
# is sent to the process, e.g with command: kill -SIGTERM $PID
signal.signal(signal.SIGTERM, sigint_handler)
while not stop:
# this represents your main loop
pass
if __name__ == "__main__":
main()
如何在 Linux 启动期间自动启动和停止 Python APScheduler(我的情况是 Centos),并在关机期间停止它?
我可以在 linux 的启动过程中启动 python 脚本,但如何停止它? (还记得 PID 吗?)
而且我想知道这是否可行,因为我想要一个简单的部署,这样开发人员就可以轻松更新 test/production 中的文件并重新启动调度程序,而无需成为 root 这样的他们可以 start/stop 服务。
目前我有调度器 started/stopped 通过使用 tmux,这是有效的,但我似乎找不到一个好的方法来改进它,以便在服务器期间 start/stop 它会自动 started/stopped 并在部署期间轻松更新 :(
通常创建一个扩展名为.pid 的文件来保存进程PID。 然后你需要注册一个信号处理程序来干净地退出,并确保在退出时删除.pid文件。
例如:
#!/usr/bin/env python
import signal
import atexit
import os
PID_FILE_PATH = "program.pid"
stop = False
def create_pid_file():
# this creates a file called program.pid
with open(PID_FILE_PATH, "w") as fhandler:
# and stores the PID in it
fhandler.write(str(os.getpid()))
def sigint_handler(signum, frame):
print("Cleanly exiting")
global stop
# this will break the main loop
stop = True
def exit_handler():
# delete PID file
os.unlink(PID_FILE_PATH)
def main():
create_pid_file()
# this makes exit_handler to be called automatically when the program exists
atexit.register(exit_handler)
# this makes sigint_handler to be called when a signal SIGTERM
# is sent to the process, e.g with command: kill -SIGTERM $PID
signal.signal(signal.SIGTERM, sigint_handler)
while not stop:
# this represents your main loop
pass
if __name__ == "__main__":
main()