Ubuntu开机自启动

  • 前言
  • 一、服务(Service)是什么?
  • 二、编写服务
    • 1.创建服务
    • 2.撰写服务内容
    • 3.设置服务自启动
  • 二、编写脚本
  • 三、编写程序
  • 总结

前言

声明:本人使用树莓派4B+ 8G安装的ubuntu20.04系统。

在ubuntu系统下,我们常常需要自己写的一些程序能够开机自启动,避免每次都需要的繁琐操作。在网上搜罗了一圈,大多数都是针对桌面版的介绍,对于无界面的远程版不是找不到就是试过很多次发现都无效!!!气的人心肝脾肺疼。当然也跟个人水平相关T-T。摸索了一下终于试出了一个百分百可靠的方法,虽然可能比较复杂,但能够很好的帮助理解自启动的逻辑,仅凭个人理解,所以见仁见智吧。


一、服务(Service)是什么?

ubuntu系统的service(服务)是随开机自启动的,并且在后台运行的程序。Ubuntu系统在开机时会先执行 /etc/systemd/system/目录下的各个服务(.service)程序,因此我们可以编写服务来实现程序开机自启动的功能。下面我们以开机执行一个python程序为例:

二、编写服务

1.创建服务

在/etc/systemd/system/目录下创建一个服务startsocket.service。

桌面版:
sudo gedit /etc/systemd/system/startsocket.service
服务器版(远程登录):
sudo vim /etc/systemd/system/startsocket.service

2.撰写服务内容

一般正常的启动文件主要分成三部分:

[Unit] 段: 启动顺序与依赖关系
[Service] 段: 启动行为,如何启动,启动类型
[Install] 段: 定义如何安装这个配置文件,即怎样做到开机启动
编写刚刚创建的服务文件:

[Unit]
Description=startsocket #服务描述
After=syslog.target    #该服务启动在什么之后[Service]
ExecStart=/home/ubuntu/start_socket.sh #服务需要执行的脚本
SuccessExitStatus=143[Install]
WantedBy=multi-user.target graphical.target    #在多用户模式和图形化界面下启动

填写完毕后保存退出即可。(如果是vim打开的,先按 esc 、再按 :x ,即可保存退出)
VIM命令介绍:https://blog.csdn.net/wangguchao/article/details/81780567

3.设置服务自启动

重载服务列表:
sudo systemctl daemon-reload
设置服务自启动:
sudo systemctl enable startsocket.service

执行完以后就会提示已经创建成功

Created symlink /etc/systemd/system/multi-user.target.wants/startsocket.service → /etc/systemd/system/startsocket.service.
Created symlink /etc/systemd/system/graphical.target.wants/startsocket.service → /etc/systemd/system/startsocket.service.

如果是disable,则是

Removed /etc/systemd/system/multi-user.target.wants/startsocket.service.
Removed /etc/systemd/system/graphical.target.wants/startsocket.service.

服务相关的操作:

sudo systemctl disable xxx (关闭某个服务自启动)
sudo service xxx start (手动启动某个服务)
sudo service xxx restart (重启某个服务)
sudo service xxx stop (停止某个服务)
sudo service xxx status (查看某个服务的运行状态)
journalctl -fu xxx (查看程序的输出)

如查看服务的状态,active就是正在运行。

ubuntu@ubuntu:~$ sudo service startsocket status
● startsocket.service - startsocketLoaded: loaded (/etc/systemd/system/startsocket.service; enabled; vendor preset: enabled)Active: active (running) since Fri 2021-12-24 01:26:37 UTC; 6min agoMain PID: 1709 (start_socket.sh)Tasks: 3 (limit: 9251)CGroup: /system.slice/startsocket.service├─1709 /bin/bash /home/ubuntu/start_socket.sh├─1721 sudo -S python3 main.py└─1762 python3 main.pyDec 24 01:26:37 ubuntu systemd[1]: Started startsocket.
Dec 24 01:26:39 ubuntu sudo[1721]:     root : TTY=unknown ; PWD=/home/ubuntu/raspReboot ; USER=root ; COMM>
Dec 24 01:26:39 ubuntu sudo[1721]: pam_unix(sudo:session): session opened for user root by (uid=0)
lines 1-13/13 (END)

二、编写脚本

上面编写的服务在开机时会启动一个名为start_socket.sh的脚本。下面我们来创建这个脚本:

(1)创建脚本:

touch start_socket.sh

(2)赋予可执行权限

chmod +x start_socket.sh

(3)编辑脚本

gedit start_socket.sh
或
vim start_socket.sh

(4)填写内容

#!/bin/bash
cd /home/ubuntu/pythontest
python3 main.py

该脚本的意思为进入/home/ubuntu/pythontest文件夹执行python3 main.py程序。在这个脚本里填写的就是开机能执行的程序了,根据自己的需求在这里填写对应的执行命令即可。需要注意的是执行的文件保证都已经赋予过可执行权限。

三、编写程序

最后在脚本中提到的main.py里面写自己的程序就可以啦。

总结

以上就是要讲的所有内容,本文仅仅简单介绍了服务+脚本的方法实现开机自启动,都是最简单的操作了,主要是理解自启动的实现过程,然后根据自己的需求就可以完成各式各样的功能。

Ubuntu开机自启动(适用于ubuntu桌面、服务器、树莓派)相关推荐

  1. Ubuntu开机自启动程序的方法

    文章目录 Ubuntu开机自启动程序的方法 目标效果 方案1:修改rc.local 测试结果 方案2:单独增加一个开机启动的脚本 错误1 错误2 实测结果 refs 方案3:利用官方快捷方式启动 Ub ...

  2. RoboMaster机甲大师——视觉组——ubuntu开机自启动脚本分析

    ubuntu开机自启动脚本分析 FOR THE SIGMA FOR THE GTINDER FOR THE ROBOMASTER 简介: 很久没更新了,感觉自己太弗拉不堪了,这次主要分享的是在视觉程序 ...

  3. 解决Ubuntu开机之后不显示桌面图标,只显示桌面文件的问题

    Ubuntu开机之后不显示桌面图标(指左侧那一栏),但桌面上的文件可以使用,鼠标可以使用. 鼠标右键–>打开终端:(如果鼠标不能使用,按ctl+alt+f1打开命令行桌面) 可能是compiz的 ...

  4. Ubuntu开机自启动的两种方法总结

    第一种方法 1,新建个脚本文件new_service.sh #!/bin/bash # command content exit 0 2,设置权限 sudo chmod 755 new_service ...

  5. Ubuntu开机自启动 读取.bashrc

    开机自启动脚本,启动ros节点. ros节点可以启动,但是source命令没起作用,导致matlab端读不到自定义消息. 查了一下,大概是开机自启的shell和开机后手动开启终端的shell,并不完全 ...

  6. 树莓派~ubuntu开机自启动

    Ubuntu Mate 开机自启ROS 创建 start.sh文件 #! /bin/bash cd /home/test ./opencv_exampleexit 0 运行脚本文件 chmod 777 ...

  7. Ubuntu开机自启动桌面程序

    在用户的home目录下面  ~/.config/autostart/目录下面添加启动项. 创建一个 appname.desktop 的文件,文件内容如下: [Desktop Entry] Type=A ...

  8. Ubuntu 22.04 LTS 中文桌面/服务器正式版发布 (内含 ISO 镜像下载)

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 迫不及待地想尝试 Ubuntu 22.04 LTS?现在,它终于可以下载和升级了. 该版本在之前的 LTS 版本基 ...

  9. Ubuntu开机自启动与sh脚本

    启动多个终端 .sh脚本启动多个程序(对应多个终端)之ROS篇 我们先介绍一下终端的一些信息: 终端输入: gnome-terminal 能否打开一个终端, 然后运行gnome-terminal有一些 ...

最新文章

  1. CPU 空闲时在干嘛?
  2. Cisco BFD双向转发检测技术部署案例
  3. python:实现Django简单的网页设计
  4. Spring boot+Spring Security 4配置整合实例
  5. C#中的Lock锁深入理解
  6. 【二分】雪(luogu 7405)
  7. 关于socket组播和ssdp(一)[修改1.2]
  8. python去除图像光照不均匀_【转载】光照不均匀图像分割技巧
  9. macbook配置java环境变量_配置java环境变量
  10. Spark2.2(三十九):如何根据appName监控spark任务,当任务不存在则启动(任务存在当超过多久没有活动状态则kill,等待下次启动)...
  11. C--计算求1+2!+3!+.......+n!
  12. linux/windows eclipse远程调试 c/c++程序
  13. PostgreSQL导入sql文件的方法
  14. C语言负数的小数次方,c语言 10 负次方
  15. QT 使用QAxWidget和QAxObject操作DOCX和EXECL文件,包括修改数据、插入图片、修改表格、打印文档、复制SHEET、修改页码数等
  16. python绘制世界人口地图
  17. autojs之获取ip(内网ip和公网ip)
  18. Unity 3D 游戏编程设计g03
  19. 不经一番寒彻骨,安得梅花扑鼻香?
  20. 快速搭建个人博客网站——Hexo

热门文章

  1. Android ImageView,ImageButton的scaleType属性与adjustViewBounds属性
  2. Keras入门——(5)长短期记忆网络LSTM(二)
  3. 【SPSS笔记01】交叉分析表
  4. galgame安卓_【冷月白狐游戏】这款恋爱游戏好虐心秋之回忆4| 安卓游戏~
  5. 2017秋季校园招聘iOS开发岗位面试题集锦
  6. 冒泡排序(超详细图解加代码解析,5分钟看懂)
  7. laravel 安装guzzlehttp/guzzle
  8. dd命令中dsync和fsync区别
  9. 第4章 入门心法——Windows游戏图形基础(下)
  10. 重试机制 Retry