LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3675|回复: 25

大家有没有这个问题,关于/etc/rc.d/network restart

[复制链接]
发表于 2008-3-24 22:39:10 | 显示全部楼层 |阅读模式
我系统启动时候这个服务启动正常,正常

我的网络是直接固定ip,getway上网,如果说特殊的只是锐捷需要连接,无其他网络

但是如果运行sudo /etc/rc.d/network restart,那么就出现


  1. :: Starting Network              [BUSY]  
  2. SIOCADDRT: No such process
复制代码

就好像我没有连网线一样的情况。

这个是这几天才出现的,大概就是更新了系统的时候,期间我安装了splashy,不能能使用,又删除了

谁知道可能是哪里出现问题了?
发表于 2008-3-24 23:51:22 | 显示全部楼层
initscripts也是这两天升级的,也许是它造成的吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-25 00:00:16 | 显示全部楼层
我也觉得可能是,你的有问题么?我刚把旧包删除了。哎
回复 支持 反对

使用道具 举报

发表于 2008-3-25 01:45:30 | 显示全部楼层
现在不是用netcfg2了么?
回复 支持 反对

使用道具 举报

发表于 2008-3-25 09:41:14 | 显示全部楼层
我一直都有这个问题 几个月了。
应该是路由表重复造成的。
当已经存在一条路由时,你又添加了一条相同的路由就提示这个了。
回复 支持 反对

使用道具 举报

发表于 2008-3-25 09:47:06 | 显示全部楼层
我现在用/etc/rc.d/net-profiles启动网络了,没用network了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-25 11:44:42 | 显示全部楼层
Post by latteye;1830576
我一直都有这个问题 几个月了。
应该是路由表重复造成的。
当已经存在一条路由时,你又添加了一条相同的路由就提示这个了。


我还真不知道到底是哪里出现问题了。

按照新的rc.conf修改过,新的脚本里面就少一行lo="127.0.0.1",然后INTERFACES=(eth0)里面去掉了lo。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-25 14:43:17 | 显示全部楼层
已经用net-profile暂时解决了

在/etc/rc.conf里面,注释掉所有关于网络的部分,添加类似下面的一行

  1. NETWORKS=(school)
复制代码

替换DAEMONS里面network为network-profile

然后把/etc/network-pofile/example/下面需要的拷过来,改成和上面school处一样名字,修改这个文件就好了.

不过netcfg是为了无线网络设置的,我这里简单环境貌似小题大作了。不知道我设置错了还是等待官方修复这个问题?
回复 支持 反对

使用道具 举报

发表于 2008-3-25 19:55:04 | 显示全部楼层
我知道这个问题,嘿嘿,因为我也碰到了这个问题,然后做了一些调试。

其实很简单,你把/etc/rc.d/network脚本打开来看一下,restart的时候会首先调用stop,然后是start,stop没有问题,但是start的时候,具体调用的是这个脚本中ifup这个函数,这个函数中有一句代码是判断需要start的interface是否已经启动(如果已经启动那就什么都不做了),就是这句代码有问题,因为这句代码是这样写的(大概是这样,现在没有archlinux的环境,无法拷贝过来):

[ $(/sbin/ifconfig $1 |grep -v "inet6...."|grep -e "..." -e "....") ] && return 0

这里的$1就是传递到这个函数的网络interface,比如lo,eth0这样的,设计者的意图是:因为前面已经stop了网络,所以ifconfig eth0应该没有输出,所以,上面的代码判断就是失败,于是继续往下做(不return),下面的代码就是给eth0配置IP地址和netmask这些。但问题恰恰是此时ifconfig eth0有输出,于是这句代码判断eth0已经启动了,所以不再去尝试启动eth0。

由于ifup函数中没有启动网络interface,所以在后面的代码中,设置route的时候,其实就是命令:route add default gw xxx.xxx.xxx.xxx这样的代码,default gw xxx.xxx.xxx.xxx就是我们写在/etc/rc.conf中gateway那个变量的内容。由于interface没有启动,所以route add就出错了,就打印出了SIOCADDRT: No such process 这个出错信息。

其实现在看来,目前的arch中,网络被stop了之后,输入ifconfig是什么输出都没有的,但是ifconfig eth0这个命令却有输出,这是不太符合逻辑的。估计是ifconfig这个包有问题。这就是导致问题的根源。

我现在直接将ifup中上面提到的那句代码注释掉了,不判断interface是否已经启动,就一切正常了。
回复 支持 反对

使用道具 举报

发表于 2008-3-25 20:45:28 | 显示全部楼层
哦,能提交一个bug吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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