Linux中/etc/init.d的作用

Linux服务管理
本文介绍Linux系统中通过init.d目录下的脚本来控制服务的启动、停止等操作的方法。同时还介绍了rc.local脚本的作用及其应用场景。

init.d目录包含许多系统各种服务的启动和停止脚本。它控制着所有从acpid到x11-common的各种事务。(acpid 是linux操作系统新型电源管理标准 ;X11也叫做X Window系统,X Window系统 (X11或X)是一种位图显示的视窗系统 。它是在 Unix 和 类Unix 操作系统 ,以及 OpenVMS 上建立图形用户界面的标准工具包和协议,并可用于几乎已有的现代操作系统)。

当你查看/etc目录时,你会发现许多rc#.d 形式存在的目录(这里#代表一个指定的初始化级别,范围是0~6)。在这些目录之下,包含了许多对进程进行控制的脚本。这些脚本要么以"K"开头,要么以"S"开头。以K开头的脚本运行在以S开头的脚本之前。这些脚本放置的地方,将决定这些脚本什么时候开始运行。在这些目录之间,系统服务一起合作,就像运行状况良好的机器一样。然而,有时候你希望能在不使用kill 或killall 命令的情况下,能干净的启动或杀死一个进程。这就是/etc/init.d能够派上用场的地方了!

如果你在使用Fedora系统,你可以找到这个目录:/etc/rc.d/init.d。实际上无论init.d放在什么地方,它都发挥着相同的作用。

/etc/init.d/command 选项

     comand是实际运行的命令,选项可以有如下几种:

start

stop

reload

restart

force-reload

 大多数的情况下,你会使用start,stop,restart选项。例如,如果你想关闭网络,你可以使用如下形式的命令:

     

         /etc/init.d/networking stop

  又比如,你改变了网络设置,并且需要重启网络。你可以使用如下命令:

        /etc/init.d/networking restart

  init.d目录下常用初始化脚本有:

       

networking

samba

apache2

ftpd

sshd

dovecot

mysql

  当然,你可能有其他更多常用的脚本,这个取决于你安装了什么linux操作系统。

 

二、关于/etc/rc.local

 rc.local也是我经常使用的一个脚本。该脚本是在系统初始化级别脚本运行之后再执行的,因此可以安全地在里面添加你想在系统启动之后执行的脚本。常见的情况是你可以再里面添加nfs挂载/mount脚本。此外,你也可以在里面添加一些调试用的脚本命令。例如,我就碰到过这种情况:samba服务总是无法正常运行,而检查发现,samba是在系统启动过程中就该启动执行的,也就是说,samba守护程序配置保证了这种功能本应该正确执行。碰到这种类似情况,一般我也懒得花大量时间去查为什么,我只需要简单的在/etc/rc.local脚本里加上这么一行:

          /etc/init.d/samba start

 这样就成功的解决了samba服务异常的问题。

 

 三、总结

 Linux是灵活的。正因为它的灵活性,我们总是可以找到许多不同的办法来解决同一个问题。启动系统服务的例子就是一个很好的佐证。有了/etc/init.d目录下的脚本,再加上/etc/rc.local这个利器,你可以放心的确保你的服务可以完美的启动和运行。

 

转自:http://blog.sina.com.cn/s/blog_6c3748830100yg1h.html

<think> 首先,用户的问题是:“我想查找手动执行 /etc/init.d/boot.local 文件的方法 请问如何手动执行 /etc/init.d/boot.local 文件”。这是一个具体的问题,我需要基于提供的引用和系统指令来回答。 回顾提供的引用: - 引用[1]:讨论了/etc/rc.d/rc.local和/etc/init.d的区别,包括执行时机、复杂度和systemd的普及。 - 引用[2]:描述了Linux启动顺序,包括/etc/init.d和/etc/rc.d/rc脚本的作用。 - 引用[3]:详细解释了Linux启动顺序,从固件到init进程,再到运行级别脚本的执行。 - 引用[4]:特定于SUSE的例子,涉及/etc/init.d/boot.local脚本的问题,指出它是由/etc/init.d/boot启动的,在进入runlevel前执行。 - 引用[5]:描述了/etc/rc.local和/etc/init.d/rc.local的区别,提供了一个init脚本的内容。 用户提到的文件是/etc/init.d/boot.local,这似乎是特定于SUSE系统的,类似于其他系统中的/etc/rc.local。 关键点: - 引用[4]中提到/etc/init.d/boot.local是在boot script完成后、进入runlevel前执行的。 - 手动执行这个文件可能不像直接运行它那么简单,因为它的执行环境和上下文很重要。 - 在引用[5]中,有/etc/init.d/rc.local脚本的内容,这表明/etc/rc.local可能被一个init脚本调用。 用户的问题是如何手动执行/etc/init.d/boot.local文件。这里文件路径是/etc/init.d/boot.local,我需要假设它是一个可执行的脚本文件。 在Linux中,手动执行脚本的方法通常是使用bash或sh命令,或者如果脚本有执行权限,可以直接运行它。 步骤: 1. 确保脚本有执行权限:可以使用chmod +x /etc/init.d/boot.local来添加执行权限(如果还没有)。 2. 然后,可以直接运行它:sudo /etc/init.d/boot.local或bash /etc/init.d/boot.local。 但是,根据引用[4],这个脚本在正常启动过程中由/etc/init.d/boot调用,并且在进入runlevel前执行。手动执行时,环境可能不同,可能导致问题,如引用[4]中提到的脚本不能正常退出,因为运行环境中ps命令的输出不同。 因此,手动执行时,需要模拟启动环境,但这通常比较困难。用户可能只是想测试脚本的功能。 最佳建议: - 要手动执行/etc/init.d/boot.local文件,可以直接用root权限运行它:sudo /etc/init.d/boot.local [start|stop|status],取决于脚本支持的操作。 - 参考引用[5],init脚本通常支持参数如start、stop、restart等。所以,用户可以使用sudo /etc/init.d/boot.local start来执行启动部分。 在引用[4]中提到脚本内容: #!/bin/bash while [ 1 ] do ... done 这是一个bash脚本,所以手动运行应该是可行的。 回答结构: - 根据系统指令,回答必须使用中文。 - 结构清晰:先解释方法,然后给出步骤。 - 添加引用标识:[^4] 因为引用[4]直接讨论了/etc/init.d/boot.local。 - 生成相关问题:在结束时添加相关问题。 回答内容: 1. 解释:在SUSE系统上,/etc/init.d/boot.local 是一个启动脚本,通常由系统启动过程自动调用。手动执行时,可以直接运行它。 2. 步骤: - 确保你有root权限,因为启动脚本通常需要特权。 - 打开终端。 - 运行命令:sudo /etc/init.d/boot.local start(如果脚本支持start参数)。 - 或者,直接运行:sudo /etc/init.d/boot.local(因为它可能是一个bash脚本)。 在引用[4]中,脚本的内容是一个while循环,检查java进程。手动执行时,它应该能工作,但环境不同可能导致问题。 建议: - 使用命令:sudo /etc/init.d/boot.local start - 如果没有特定参数,直接sudo /etc/init.d/boot.local 生成相关问题: 1. 如何调试/etc/init.d/boot.local脚本的问题? 2. 在SUSE系统中,启动脚本的执行顺序是怎样的? 3. 如何确保/etc/init.d/boot.local脚本在系统启动时正确运行? 4. /etc/init.d/boot.local与其他系统启动文件的区别是什么? 5. 在systemd系统下,如何管理类似boot.local的任务? 确保回答真实可靠:基于提供的引用,手动执行是直接的。 </think> ### 手动执行 /etc/init.d/boot.local 文件的方法 在 Linux 系统(特别是 SUSE 等发行版)中,`/etc/init.d/boot.local` 是一个启动脚本,通常由系统初始化过程自动调用,位于进入 runlevel 之前(即在 `boot script` 完成后执行)[^4]。如果你想手动执行此文件进行测试或调试,方法如下: #### 手动执行步骤: 1. **确保脚本可执行**: 如果文件尚未添加执行权限,需先用 `chmod` 命令修改权限: ```bash sudo chmod +x /etc/init.d/boot.local ``` 2. **直接运行脚本**: 由于 `boot.local` 是一个 Bash 脚本,可使用以下命令执行: ```bash sudo /etc/init.d/boot.local ``` 或指定参数(如 `start`、`stop`,取决于脚本设计): ```bash sudo /etc/init.d/boot.local start ``` 3. **检查输出和日志**: 手动执行后,查看终端输出或系统日志以验证结果: ```bash journalctl -xe # 使用 systemd 的系统 ``` 或检查 `/var/log/boot.log` 等日志文件。 #### 注意事项: - **权限需求**:必须使用 `sudo` 或以 root 用户运行,否则可能因权限不足失败。 - **执行环境差异**:手动执行时,系统环境(如进程列表、运行级别)可能与启动时的环境不同。例如,引用[^4]中提到,手动执行时 `ps -ef` 的输出可能与启动过程中不同,导致脚本行为异常。 - **参数支持**:部分脚本支持特定参数(如 `start`、`restart`),可通过查看脚本内容确认: ```bash cat /etc/init.d/boot.local ``` 引用[^5]中的示例表明,类似脚本通常设计为响应 `start` 命令。 #### 替代方法(针对 systemd 系统): 如果系统已迁移到 systemd(如较新的 SUSE 或 Ubuntu),可通过服务单元管理: ```bash sudo systemctl restart rc-local.service # 对于 /etc/rc.local 的等效操作 ``` 但 `/etc/init.d/boot.local` 本身不是标准 systemd 服务,直接执行脚本仍是首选方法[^1][^5]。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值