当前位置: 首页 > news >正文

ubuntu上创建服务启动python脚本

场景

最近在使用ubuntu服务器部署MySQL和同步数据,同步数据使用的是python,但是我不能直接操作服务器,只能通过Xshell远程访问服务器,但是启动python脚本的时候如果关掉xshell会停止Python脚本,所以如果要让python脚本继续在后台运行,有以下几种方法来实现。
选择哪种方法取决于您的具体需求和偏好。nohup 简单但功能有限,screen 或 tmux 提供更多灵活性,而 systemd 方法更适合长期运行的后台服务。

1.使用nohup命令

nohup 命令可以让您运行的程序在关闭终端后继续运行。

  • 执行命令
nohup python3 your_script.py &

这里 your_script.py 是您的Python脚本文件。

  • nohup 会将输出重定向到 nohup.out 文件,除非您指定了其他输出文件。

2.使用screentmux

screen 和 tmux 是终端多路复用器,允许您从一个会话中分离出来,并在以后重新连接。

  • 首先安装 screen 或 tmux(如果尚未安装):
sudo apt-get install screen

sudo apt-get install tmux
  • 创建一个新会话:
screen -S session_name

tmux new -s session_name
  • 在会话中运行您的Python脚本:
python3 your_script.py
  • 分离会话:
    • 在 screen 中,按 Ctrl-A 然后按 D。
    • 在 tmux 中,按 Ctrl-B 然后按 D。
  • 重新连接到会话:
    • 对于 screen,使用 screen -r session_name。
    • 对于 tmux,使用 tmux attach -t session_name。

3.使用 systemd 服务

如果您希望脚本像服务一样运行,可以创建一个 systemd 服务单元。

1.准备你的python脚本

  • 确保你的Python脚本位于你的Ubuntu服务器上,并记下其路径。例如,假设脚本的路径是 /home/username/my_script.py。
  • 确保脚本具有执行权限:
chmod +x /home/username/my_script.py
  • 脚本首行应该指定Python解释器的路径,例如:
#!/usr/bin/env python3

2.创建Systemd服务文件

  • 以root用户权限打开一个新的服务文件。假设你的服务名为 y_python_script.service
sudo nano /etc/systemd/system/my_python_script.service
  • 在服务文件中添加以下内容,替换/home/username/my_script.py为你的脚本的实际路径:
[Unit]
Description=My Python Script Service[Service]
ExecStart=/usr/bin/python3 /home/username/my_script.py
WorkingDirectory=/home/username/
Restart=on-failure[Install]
WantedBy=multi-user.target
  1. Description 是服务的描述。
  2. ExecStart 指定启动服务时执行的命令。
  3. Restart 指定何时重启服务,on-failure 表示仅在失败时重启。
  4. WorkingDirectory 指定的是脚本所在目录,并且在脚本引用外部的配置文件时要写上。
  • 保存并关闭文件。

3.启用服务

  • 重新加载 systemd 以识别新服务:
sudo systemctl daemon-reload
  • 启动服务:
sudo systemctl start my_python_script.service
  • 检查服务状态,确保一切运行正常:
sudo systemctl status my_python_script.service
  • (可选)设置服务在系统启动时自动启动:
sudo systemctl enable my_python_script.service

4.管理服务

  • 停止服务:
sudo systemctl stop my_python_script.service
  • 重新启动服务:
sudo systemctl restart my_python_script.service
  • 查看服务日志:
journalctl -u my_python_script.service

结束

主要花了很大的篇幅来介绍systemd服务,因为使用 systemd 管理Python脚本作为服务,提供了更多的控制和灵活性,例如自动重启、日志记录等。这对于生产环境中运行长期任务特别有用。

http://www.lryc.cn/news/253329.html

相关文章:

  • 51单片机制作数字频率计
  • java中强引用、软引用、弱引用、虚引用的区别是什么?
  • springboot -事务管理
  • 商城系统通过Kafka消息队列,实现订单的处理和状态更新
  • IntelRealSense深度相机D455在ROS1运行中的消息内容
  • 公有云迁移研究——AWS Translate
  • 【laBVIEW学习】4.声音播放,自定义图标,滚动条设置,保存参数以及恢复参数
  • 《论文阅读》使用条件变分自动编码器学习神经对话模型的语篇水平多样性 2017 ACL
  • 【win32_003】不同字符集下的通用字符串语法TCHAR、TEXT、PTSTR、PCTSTR
  • 《漫长的等待》—— 读后感
  • 基于ROPNet项目训练modelnet40数据集进行3d点云的配置
  • 力扣215. 数组中的第K个最大元素
  • 轻量封装WebGPU渲染系统示例<40>- 多层材质的Mask混合(源码)
  • 程序员的实用网站导航与推荐
  • 上午面了个腾讯拿 38K 出来的,让我见识到了基础的天花板
  • 【halcon】C# halcon 内存暴增
  • LeetCode130. Surrounded Regions
  • 【实战教程】PHP如何轻松对接腾讯云COS,实现文件上传下载?
  • pytorch学习10-网络模型的保存和加载
  • SQL Server 2016(分离和附加数据库)
  • 用友U8 Cloud RegisterServlet SQL注入漏洞复现
  • coding创建远程分支。并拉取远程新分支+推送代码
  • 坚鹏:中国工商银行内蒙古分行数字化转型发展现状与成功案例培训
  • AIGC发展史
  • 面试题库之JAVA基础篇(二)
  • [Rust] 可迭代类型, 迭代器, 如何正确的创建自定义可迭代类型
  • MySQL中,text,mediumtext, 和 longtext字符类型
  • 网页开发 JS基础
  • 如何在财税行业查找批量客户?
  • IntelliJ IDEA详细完整安装教程