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所在的行。即:
  1. #Defaults    requiretty
复制代码
(2)你的允许执行lvscan命令的内容类似下面(即加上NOPASSWD,在使用sudo执行该命令时可以不用密码):
  1. bearzhang       ALL=NOPASSWD:/usr/sbin/lvscan,/sbin/sudo
复制代码
如果只允许在某台主机上使用该命令则将ALL换成允许的主机即可,例如:
  1. bearzhang       www.koorka.com=NOPASSWD:/usr/sbin/lvscan,/sbin/sudo
复制代码

[ 本帖最后由 free_man_008 于 2007-6-19 15:21 编辑 ]

 

 

posted @ 2012-09-14 14:50  陳聽溪  阅读(2114)  评论(0)    收藏  举报