rc.local,sudo,环境变量
rc.local中的命令没能生效,一般有几种情况:
一,/etc/rc.d/rc3/5.d/中没有 S99local -> ../rc.local
二,需要运行的脚本或者命令,需要对应的环境变量,但是没有申明
三,没有权限,比如/etc/sudoers中没有注释掉Defaults requiretty
四,非root用户执行命令需要 su - username -c "commandline"
五,默认的shell不是bash,而是别的
=========================
http://blog.chinaunix.net/uid-16935607-id-2842866.html
1,sudo -u username /home/xxx/xxx.sh //rc.local写入sudo命令+参数+sh路径
2,su - username -c "/path/program.name" //加进rc.local就可以了( 如果不生效需修改visudo添加权限)
http://hi.baidu.com/software_one/item/97201ae7593f293d4ddcafe3
sudo chmod +x /etc/rc.local // 增加可执行权限
sudo chmod +s /etc/rc.local //
增加s权限,即让普通用户执行该文件时拥有文件所有者的权限
http://topic.csdn.net/u/20101127/21/870a0645-958d-4223-b155-68bdf2b8e6c0.html
bash -x /etc/rc.local
source /etc/rc.local
http://gcoder.blogbus.com/logs/49929050.html
通过 /etc/rc.local 或者 cfagent 执行 sudo 命令时,会得到这个错误,意思是执行sudo 的shell 需要一个控制终端。在 /etc/rc.local 或者 cfagent 中的命令,是没有控制终端的。
在 http://www.question-defense.com/2009/03/23/sudo-sorry-you-must-have-a-tty-to-run-sudo/上找到了答案,因为是英文的,总结其解决方案如下:
1. 编辑 /etc/sudoers
1)Defaults requiretty,修改为 #Defaults requiretty,表示不需要控制终端。
2)Defaults requiretty,修改为 Defaults:nobody !requiretty,表示仅 nobody 用户不需要控制终端。
如果修改为 Defaults:%nobody !requiretty,表示仅 nobody 组不需要控制终端。
2. 给 ssh 加上 -t 选项,表示不要控制终端。
ssh -t hostname sudo <cmd>
可以 man sudoers,获取更多相关信息。
http://bbs.chinaunix.net/thread-2117206-1-1.html
用sudo是最好的办法,针对你的问题,在/etc/sudoers文件中做如下修改: (1)注释掉:Defaults requiretty所在的行。即:
[ 本帖最后由 free_man_008 于 2007-6-19 15:21 编辑 ] |