ubuntu配置开机启动服务

本文详细介绍了Ubuntu系统启动服务的配置方法,包括运行级别的概念、启动步骤、sysv-rc-conf和update-rc.d命令的使用。通过实例演示如何安装服务、设置启动和停止顺序、以及使用rc.local脚本实现类服务功能。同时解释了系统启动过程及与之相关的文件和命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在ubuntu10.04之前的版本都是使用chkconfig来进行管理,而在之后的版本就没有了,如果想继续使用chkconfig命令,只好自己apt-get install下了。

sudo apt-get install chkconfig

在这里我给大家介绍另两个命令来配置ubuntu的启动服务,sysv-rc-confupdate-rc.d

背景知识

1、运行级别:

Linux系统任何时候都运行在一个指定的运行级上,并且不同的运行级程序和服务都不同,所要完成的工作和要达到的目的也不同,系统可以在这些运行级之间进行切换,来完成不同的工作。

运行级别等级:

  • 0        系统停机状态
  • 1        单用户模式,只准许root用户对系统进系维护
  • 2~5  多用户模式(其中3为字符界面、5为图形界面)
  • 6         重启启动

在这里需要注意的是,在Debian下(ubuntu其中之一)level2~5是没有任何区别的。

使用以下命令,可以查看当前的运行级别:

runlevel
runlevel显示上次的运行级别和当前的运行级别,“N”表示没有上次的运行级别。

使用以下命令,可以切换运行级别:

init [123456]
例如,init 0表示关机,init 6表示重启。


2、启动步骤:

  • 读取MBR信息,启动Boot Manager,Linux通常使用GRUB作为Boot Manager。
  • 加载系统内核,启动init进程。init进程是Linux的根进程,所有的系统进程都是它的子进程。
  • init进程读取/etc/inittab文件中的信息,并进入预设的运行级别。在这里需要说下的是,在ubuntu的6.10版本以后,就没有了/etc/inittab文件,是因为inittab已经被update软件包所取代了,具体的可以查看/usr/share/doc/update目录。就不在这里介绍了。
  • 执行/etc/rcS.d/目录下的脚本,然后是/etc/rcX.d/目录下的脚本,X代表的是数字0~6。rcS.d和rcX.d目录下的文件都是以,S或K加上两位数字组成的,其中S代表start,K代表kill,而两位数字代表启动顺序,数字越大代表级别越低。


sysv-rc-conf使用

sudo apt-get install sysv-rc-conf
它具有操作简单,简洁的操作界面,你可以使用鼠标点击,也可以使用键盘操作,空格键代表选择,“X”表示开启服务,Ctrl+N下一页,Ctrl+P上一页,Q退出。


update-rc.d使用

update-rc.d是一个Perl脚本,是用来自动升级System V类型初始化脚本,简单来说就是哪些东西是你想要在系统引导初始化的时候运行的,哪些是希望在关机或重启时候停止的,都可以用它来帮你设置。这些脚本的连接位于/etc/rcX.d/下(X代表0~6),对应脚本位于/etc/init.d/下。

1、设置启动项:

update-rc.d <serviceName> start <order> <runlevel>


2、设置停止项:

update-rc.d <serviceName> stop <order> <runlevel>

设置启动和停止可以写在一起,例如:

sudo update-rc.d <serviceName> start 20 1 2 3 4 5 . stop 60 0 6 . 
一定要注意,写在一起的时候后面的两个“.”符号一定要有,不然报错。

3、从所有的运行级别中删除制定的启动项

update-rc.d -f <serviceName> remove

示例

根据上面的介绍,如何将一个软件安装为服务也就比较清楚了,那就是在/etc/init.d添加一个服务的启动脚本,然后在需要启动服务的对应级别中/etc/rc[0~6].d按照文件名格式添加一个指向/etc/init.d的脚本符号链接。

以apache2为例,默认情况下,apache2编译安装在/usr/local/apache2,apache2的服务器启动脚本是/usr/local/apache2/bin/apachectl,那么安装服务就是要把此apachectl拷贝到需要启动apache2服务器的运行级别对应的/etc/rc[0~6].d目录下,一半来说ubuntu的运行级别为2,所以也就是拷贝到/etc/rc2.d下。

sudo cp /usr/local/apache2/bin/apachectl /etc/init.d/apache2
如果手动添加的话:

sudo ln -s /etc/init.d/apache2 /etc/rc2.d/S80apache2
重启服务器后,就可以看到apache2自动启动了。

这时如果想要停止或重启apache2也可以使用以下命令:

service apache2 stop
service apache2 restart

使用update-rc.d来添加:

sudo update-rc.d apache2 start 80 2 3 4 5 .
sudo update-rc.d apache2 stop 80 0 1 6 .

如果不想要这个apache2启动和停止的服务话,把它remove掉:

sudo update-rc.d -f apache2 remove
参数-f是强制删除符号链接,即使/etc/init.d/apache2仍然存在。

同样我们也可以使用defaults参数来向运行级别2、3、4、5启动服务,也就是start,并同时向运行级别0、1、6添加关闭命令,即stop。

sudo update-rc.d apache2 defaults 80 80
第一个80代表start,第二个80代表stop。

rc.local

在/etc/rc[2~5].d目录下都会有一个S99rc.local脚本,这是一个指向/etc/init.d/rc.local的链接,可以看出,在正常的2~5级别启动的最后都会调用这个rc.local脚本。而/etc/init.d/rc.local中又会检查是否存在/etc/rc.local,并运行。因此,我们也可以在/etc/rc.local中写入代码,来随系统启动某些程序,实现类似服务的功能。


系统的启动过程

综上,我们可以看到,系统的启动调用过程如下:

内核 -> /etc/init/rc-sysint.conf -> /etc/inittab -> etc/init.d/rc -> /etc/rc[0~6].d -> /etc/init.d/rc.local ->/etc/rc.local

虽然在ubuntu后来的版本中默认已经没有了inittab文件,但我可以自行添加。

以上的启动过程,并不是代表所有,以Redhat系列的CentOS5为例:

内核 -> /etc/inittab -> /etc/ rc.sysinit (/etc/rc.d/rc.sysinit) -> /etc/rc[?].d (/etc/rc.d/rc[?].d) -> /etc/rc.local(/etc/rc.d/rc.local)

Ubuntu系统中配置程序或服务开机启动有多种方法,具体取决于程序或服务的类型以及你的需求。以下是几种常见的方法: ### 1. 使用 `systemd` 配置开机启动 `systemd` 是 Ubuntu 系统中默认的初始化系统和服务管理工具。你可以通过创建 `.service` 文件来配置服务开机启动。 #### 示例:创建一个自定义服务 假设你想让一个名为 `myprogram` 的程序在开机时自动启动,可以按照以下步骤操作: 1. 创建服务文件: ```bash sudo nano /etc/systemd/system/myprogram.service ``` 2. 在文件中添加以下内容(根据实际情况修改): ```ini [Unit] Description=My Custom Program After=network.target [Service] ExecStart=/usr/bin/python3 /path/to/your/script.py WorkingDirectory=/path/to/your/ StandardOutput=journal StandardError=inherit Restart=always User=your_username [Install] WantedBy=multi-user.target ``` 3. 保存并退出编辑器,然后启用服务: ```bash sudo systemctl enable myprogram.service ``` 4. 启动服务: ```bash sudo systemctl start myprogram.service ``` 5. 检查服务状态: ```bash sudo systemctl status myprogram.service ``` ### 2. 使用 `cron` 配置开机启动 `cron` 是一个定时任务调度器,可以通过 `@reboot` 关键字来配置开机时运行的任务。 #### 示例:使用 `cron` 启动脚本 1. 编辑当前用户的 `crontab` 文件: ```bash crontab -e ``` 2. 添加以下行(根据实际情况修改): ```bash @reboot /usr/bin/python3 /path/to/your/script.py ``` 3. 保存并退出编辑器。 ### 3. 使用 `rc.local` 配置开机启动 `rc.local` 是传统的 Linux 启动脚本,适用于简单的启动任务。 #### 示例:修改 `rc.local` 1. 确保 `rc.local` 文件存在并可执行: ```bash sudo touch /etc/rc.local sudo chmod +x /etc/rc.local ``` 2. 编辑 `rc.local` 文件: ```bash sudo nano /etc/rc.local ``` 3. 在文件中添加以下内容(根据实际情况修改): ```bash #!/bin/bash /usr/bin/python3 /path/to/your/script.py & exit 0 ``` 4. 保存并退出编辑器。 ### 4. 使用桌面环境配置开机启动(适用于 GUI 应用) 如果你使用的是带有桌面环境的 Ubuntu(如 GNOME 或 KDE),可以通过桌面环境的设置来配置开机启动。 #### 示例:使用 GNOME 配置开机启动 1. 打开“启动应用程序首选项”(Startup Applications Preferences)。 2. 点击“添加”按钮。 3. 输入程序的名称、命令和注释。 4. 点击“添加”保存配置。 ### 注意事项 - **权限问题**:确保程序或脚本具有适当的执行权限。 - **路径问题**:在配置文件中使用绝对路径,避免因工作目录问题导致程序无法启动。 - **日志记录**:建议将程序的输出重定向到日志文件或使用 `journal` 记录,以便调试。 - **测试配置**:在生产环境中应用配置之前,建议在虚拟机或测试环境中验证配置是否有效。 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值