linux /etc/service,Linux(RedHat)中service命令和/etc/init.d/的关系

本文介绍如何在Linux系统中创建并启动服务。通过存放脚本到指定目录、使用chkconfig工具进行配置,实现服务的自启动及管理。文章还提供了一个示例脚本,展示如何根据不同的操作选项来启动或停止服务。

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

service xxx启动 /etc/init.d/ 目录下的xxx脚本

如一个脚本名为 mysvc保存在/etc/init.d/下可以用 service mysvc 运行mysvc脚本

echo passed in option $0 $1

if [ $1 = "start" ]

then

echo myservice started........................................

elif [ $1 = "stop" ]

then

echo myservice stoped........................................

else

echo myservice not supported option........................................

fi

[root@localhost init.d]# service mysvc start

passed in option /etc/init.d/mysvc start

myservice started........................................

[root@localhost init.d]# service mysvc stop

passed in option /etc/init.d/mysvc stop

myservice stoped........................................

[root@localhost init.d]# service mysvc xxx

passed in option /etc/init.d/mysvc xxx

myservice not supported option........................................

如何增加一个服务在机器启动时启动:

1.服务脚本必须存放在/etc/ini.d/目录下;

2.chkconfig --add servicename

在chkconfig工具服务列表中增加此服务,此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了;

3.chkconfig --level 35 servicename on

修改服务的默认启动等级。

脚本需要有下面的的内容,否则会 service servicename does not support chkconfig

# chkconfig: - 85 15

# description: description for the service

#上面为固定格式:- 表示运行级别(所有),85表示开机执行顺序,15为关机顺序,完整内容如下

#!/bin/bash

#chkconfig: - 85 15

# description: mytestservice is a serveice created for testing.

if [ $1 = "start" ]

then

echo myservice started `date` ....................................... >>

/home/mytestservice.log

elif [ $1 = "stop" ]

then

echo myservice stoped `date` ........................................ >

> /home/mytestservice.log

else

echo myservice not supported option `date` .............................

........... >>/home/mytestservice.log

fi

<think>嗯,用户想知道如何获取执行/etc/init.d/network restart时运行了哪些命令。首先,我需要考虑这个脚本的工作方式。通常,这类init.d脚本是Shell脚本,所以直接查看脚本内容应该能找到线索。不过,用户可能已经试过直接看脚本,但想更详细地跟踪执行过程。 接下来,我应该想到几种方法。第一种是直接阅读脚本文件,用cat或者vim查看。但脚本里可能有函数调用或者条件判断,直接读可能不够直观。这时候可能需要更动态的方法,比如使用bash的调试选项,比如set -x或者-xv选项,这样可以在执行时打印出每个命令及其参数。用户可能不熟悉这些调试选项,所以需要详细说明如何使用。 另外,考虑到有些系统可能使用绝对路径调用其他命令,可能需要用strace来跟踪系统调用。不过strace的输出可能会很详细,包含很多系统级别的信息,用户可能需要过滤出execve这样的调用来查看执行的命令。这里需要解释strace的基本用法如何过滤输出。 还有,可能需要考虑不同Linux发行版的差异,比如CentOSUbuntu的init.d脚本可能不同,但network脚本通常比较类似。用户可能是在CentOS或者类似的系统上操作,但方法应该是通用的。 另外,用户可能没有root权限,所以需要提醒他们可能需要sudo来执行某些命令,比如strace或者直接运行脚本。同时,提醒备份原来的脚本,避免修改后出现问题。 最后,可能需要总结这几种方法的优缺点,比如直接阅读脚本简单但可能遗漏动态部分,调试选项strace更详细但输出较多。根据用户的需求,推荐合适的方法。</think>要查看`/etc/init.d/network restart`实际执行的命令序列,可以通过以下方法逐步分析: 1. **直接查看脚本内容** ```bash cat /etc/init.d/network # 或使用编辑器 vim /etc/init.d/network ``` 该脚本本质是一个Shell脚本,主要逻辑可能包含: - 调用`service network restart` - 使用`ifdown``ifup`命令 - 操作NetworkManager服务 - 特定发行版的处理逻辑(如RedHat的`/etc/sysconfig/network-scripts/`配置) 2. **使用调试模式执行** ```bash # 添加-x参数显示执行过程 sh -x /etc/init.d/network restart # 或直接修改脚本首行 #!/bin/sh -x ``` 示例输出: ``` + case "$1" in + restart + stop + check + ...(显示实际执行命令) ``` 3. **使用strace跟踪系统调用** ```bash strace -f -e execve /etc/init.d/network restart 2>&1 | grep execve ``` 输出示例: ``` execve("/sbin/service", ["service", "network", "restart"], [/* 30 vars */]) = 0 execve("/sbin/ifdown", ["ifdown", "eth0"], [/* 30 vars */]) = 0 execve("/sbin/ifup", ["ifup", "eth0"], [/* 30 vars */]) = 0 ``` 4. **结合系统日志查看** ```bash # 查看systemd日志(适用于较新系统) journalctl -u network.service -f # 查看传统syslog tail -f /var/log/messages ``` **典型执行流程**(以CentOS为例): 1. 停止网络服务:`service network stop` 2. 关闭所有接口:`ifdown -a --exclude=lo` 3. 启动网络服务:`service network start` 4. 重新读取配置:`ifup -a` **注意事项**: - 不同发行版实现可能不同(Ubuntu使用netplan,Arch使用netctl等) - 现代系统可能通过systemd直接调用:`systemctl restart network.service` - 修改系统脚本前建议备份:`cp /etc/init.d/network ~/network.bak`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值