ubuntu设置程序开机自启动

打印 上一主题 下一主题

主题 801|帖子 801|积分 2403

1、概述

   测试环境:ubuntu22.04 带图形界面
实现方式1:通过图形界面的【启动应用程序】设置开机自启动;
实现方式2:通过设置为服务实现开机自启动。
  2、图形界面设置

   长处:
  

  • 图形界面
  • 使用简朴
  缺点:
  

  • 灵活性差,假如启动有依赖或者必要实现保卫进程只能通过写shell脚本实现。
  

  • 找到【启动应用程序】;

  • 点击【添加】,然后在【下令】栏输入必要启动的可执行程序路径,名称任意填。

  • 点击【保存】后,在系统启动后会自动启动添加的可执行程序。
  • 设置文件保存在~/.config/autostart文件夹下。
3、设置为Systemd服务

   长处:
  

  • 功能强大,使用灵活;
  • 支持设置程序启动依赖,例如在网络准备好了后再启动;
  缺点:
  

  • 没有图形界面,使用较为复杂;
  

  • 官方文档
  • 进入/etc/systemd/system文件夹;
  • 创建一个.service后缀的文件,名称自定;
  • 文件中填入启动服务的设置信息,如下所示;
  1. [Unit]
  2. Description=WebServer    # 简单描述服务
  3. After=network.target     # 指定服务模块启动后再启动(网络模块启动)
  4. [Service]
  5. User=mhf                 # 设置服务运行的用户,带图形界面的程序最好使用普通用户运行,否则可能会启动失败,自己系统的用户名
  6. WorkingDirectory=/home/mhf/Code/bin64      # 设置进程的工作目录
  7. ExecStart=/home/mhf/Code/bin64/ChatServer  # 设置启动的可执行程序路径
  8. Restart=always                             # 设置进程 退出后的重启方式 always:总是重启
  9. RestartSec=5                               # 重启服务之前需要等待的秒数
  10. Environment=DISPLAY=:0   # 带图形界面的程序必须指定运行桌面环境,否则会启动失败
  11. # 环境变量 DISPLAY 告诉GUI程序如何与GUI通信。Unix系统可以运行多个X服务器,即多个显示。这些显示可以是物理显示(一个或多个监视器),或远程显示(通过网络转发,例如通过SSH),或虚拟显示,如Xvfb等。指定显示的基本语法是 HOST:NUMBER ;如果忽略 HOST 部分,则显示为本地显示。
  12. # 显示从0开始编号,因此 :0 是启动的第一个本地显示。在典型的设置中,这是显示在计算机显示器上的内容。
  13. [Install]
  14. WantedBy=multi-user.target
复制代码


  • 常用设置阐明
  1. [Unit]    # 启动顺序与依赖关系。
  2. Description:对当前服务的简单描述。
  3. After:指定.serive在哪些服务之后进行启动;
  4. Before:指定.serive在哪些服务之前进行启动;
  5. 除上述内容,文件中还可能出现以下内容:
  6. Requires:指定服务依赖于哪些服务(强依赖关系,一旦所依赖服务异常,当前服务也随之停止);
  7. Wants:指定服务依赖于哪些服务(弱依赖关系,所依赖服务异常不影响当前服务正常运行)。
  8. [Service]   # 启动行为
  9. Type:定义启动类型。可设置:simple,exec,forking,oneshot,dbus,notify,idle。
  10. simple:ExecStart 字段启动的进程为该服务的主进程;
  11. forking:ExecStart 字段的命令将以 fork() 方式启动,此时父进程将会退出,子进程将成为主进程;
  12. ExecStart:定义启动进程时执行的命令;
  13. ExecStop:停止服务时执行的命令;
  14. 除上述内容外,文件中还可能出现:
  15. EnvironmentFile:环境配置文件,用来指定当前服务启动的环境变量;
  16. ExecReload:重启服务时执行的命令;
  17. ExecStartPre:启动服务之前执行的命令;
  18. ExecStartPost:启动服务之后执行的命令;
  19. ExecStopPost:停止服务之后执行的命令;
  20. RemainAfterExit:设为yes,表示进程退出以后,服务仍然保持执行;
  21. RestartSec:重启服务之前需要等待的秒数。
  22. KillMode:定义 Systemd 如何停止服务,可以设置的值如下:
  23.     control-group(默认值):当前控制组里面的所有子进程,都会被杀掉;
  24.     process:只杀主进程;
  25.     mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号;
  26.     none:没有进程会被杀掉。
  27. Restart:定义了退出后,Systemd 的重启方式,可以设置的值如下:
  28.     no(默认值):退出后不会重启;
  29.     on-success:当进程正常退出时(退出状态码为0),才会重启;
  30.     on-failure:当进程非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启;
  31.     on-abnormal:当被信号终止和超时,才会重启;
  32.     on-abort:当收到没有捕捉到的信号终止时,才会重启;
  33.     on-watchdog:看门狗超时退出,才会重启;
  34.     always:总是重启。
  35. [Install]  # 区块
  36. Install一般填为WantedBy=multi-user.target,表示多用户环境下服务被启用。
复制代码


  • 设置完成后加载服务设置,用于服务文件修改后的设置更新。
  1. sudo systemctl daemon-reload
复制代码


  • 立即启动服务
  1. sudo systemctl start <service_name>
  2. # 例如
  3. sudo systemctl start ChatServer.service
  4. sudo systemctl start ChatServer
复制代码


  • 停止服务
  1. sudo systemctl stop <service_name>
  2. # 例如
  3. sudo systemctl stop ChatServer.service
复制代码
错误信息 :假如GUI程序没设置使用普通用户启动、没有设置Environment=DISPLAY=:0就会报错
  1. 11月 25 17:48:30 mhf-virtual-machine systemd[1]: Stopped WebServer.
  2. 11月 25 17:48:30 mhf-virtual-machine systemd[1]: Started WebServer.
  3. 11月 25 17:48:30 mhf-virtual-machine ChatServer[5154]: Authorization required, but no authorization protocol specified
  4. 11月 25 17:48:30 mhf-virtual-machine ChatServer[5154]: qt.qpa.xcb: could not connect to display :0
  5. 11月 25 17:48:30 mhf-virtual-machine ChatServer[5154]: qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
  6. 11月 25 17:48:30 mhf-virtual-machine ChatServer[5154]: This application failed to start because no Qt platform plugin could be initialized.  Reinstalling the application may fix this problem.
  7. 11月 25 17:48:30 mhf-virtual-machine ChatServer[5154]: Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.
  8. 11月 25 17:48:30 mhf-virtual-machine systemd[1]: ChatServer. service: Main process exited, code=dumped, status=6/ABRT
  9. 11月 25 17:48:30 mhf-virtual-machine systemd[1]: ChatServer. service: Failed with result 'core-dump'.
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

兜兜零元

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表