读书人

linux

发布时间: 2012-02-24 16:30:39 作者: rapoo

求助,linux高手请进
现在开发的一个项目进入最后调试阶段,以前很多东西都是在root权限下做的,现在必须移到普通用户下,系统是Fedora8,而且这个程序必须是24小时无人值守的,可能出现断电等其它异常情况,系统重新启动后要自动登录,并且卸载一些模块再加载一些模块,我自己现在的做法如下:
因为普通用户没有卸载和加载的权限,所以将卸载和加载的命令写在/etc/rc.d/rc.local中,rc.local中的内容如下:

C/C++ code
touch /var/lock/subsys/local  //此为文件中原来存在的/sbin/rmmod -f bt878  //这句执行是成功的/sbin/rmmod bttv  //这句也是成功的/sbin/insmod /home/ahkeli/keli/cg3xx.ko pll=28  //这句没有执行成功,启动后lsmod看不到这个模块

问题就是这三条命令没有完全执行成功,启动后如果我切到root权限再执行一次rc.local就没有问题,请问高手这是怎么回事,有什么好的解决方案,另外在系统关机的时候会出现"insmod: can't read '/home/ahkeli/keli/cg3xx.ko': Permission denied"的错误,并且一直卡在那里

顺便再问一个问题,自己写了一个守护进程去监控我的程序,程序是GTK写的界面程序,守护进程也是放在rc.local里运行,并且运行2分钟后开始调用execl执行我的程序,但是并没有执行,如果系统启动后我把这个守护进程关掉再重新启动就完全正常,这是什么问题?



[解决办法]
给你的可执行程序设置s位吧, 在root权限下,chmod u+s,然后普通用户运行这个程序就有root权限了,当然仅限于这个进程。不知道满需你说的不,一般像这种,可以为程序新建用户和组,赋予该用户某些权限。
[解决办法]
http://blog.chinaunix.net/u3/93926/showart_1873349.html

为何不能使用root,能否解释清楚,可以考虑配置/etc/soduers,通过sudo来暂时使用root权限执行。



至于你的守护进程的问题,由于第2次就ok了,说明,进程代码没有问题,只是可能在rc.local被执行的时候,某些环境还没执行起来,导致execl不能正确执行,你试着在守护进程里sleep几秒看看。
[解决办法]
模块不要这样加载,用modprobe自动加载比较好,
redhat公司的linux我不熟,不过跟debian应该有类似的机制。
/etc下有配置自动加载的模块的文件

读书人网 >C++

热点推荐