CentOS 6.5
服务器是 AWS AMI,具体来说这个
我正在尝试使用 upstart 在启动时启动一个进程
在这个特定的盒子上,root
登录被禁用,每次我需要用sudo
它运行某些东西时都会询问我的密码
所以简单地将我的命令放入脚本中是行不通的。
我试着跟随这个答案,没有成功
我在 /ect/init 目录中有这个 rio.conf 文件:
start on runlevel [2345]
stop on runlevel [!2345]
exec echo Password! | sudo -s /usr/bin/riofs --fuse-options="allow_other" --fmode=0777 --dmode=0777 xx.xxxxxx /mnt/applications/recorder/streams/_definst_/s3
每当我运行这个时,似乎什么都没有发生。
Password!
这只是一个示例密码。
编辑:
如果我输入,exec /usr/bin/riofs
我的 SSH 窗口将会关闭,然后当我返回时,我可以看到它正在工作。我不知道这意味着什么,也不知道如何自动化。
答案1
您不需要sudo
在 init/upstart 脚本中。默认情况下,所有 init/upstart 服务都以 root 身份运行。
这样想,您希望新贵脚本以什么用户身份运行?如果您希望它以您的个人用户身份运行,为什么会这样呢?系统只看到一个脚本,它不知道您的个人用户是谁。
简而言之,将您的exec
行更改为:
exec /usr/bin/riofs --fuse-options="allow_other" --fmode=0777 --dmode=0777 xx.xxxxxx /mnt/applications/recorder/streams/_definst_/s3
虽然最终我也不会这样做。您正在安装一个文件系统,这是一项工作/etc/fstab
:
riofs#xx.xxxxxx /mnt/applications/recorder/streams/_definst_/s3 _netdev,allow_other,fmode=0777,dmode=0777 0 0
答案2
您可以将 sudo 配置为无需用户密码即可工作。以 root 身份执行 visudo,并将 NOPASSWD 添加到用户行:
user ALL=(root) NOPASSWD: ALL
编辑
鉴于这是一个新贵脚本,帕特里克的答案是正确的。
此外,对于任意脚本,0xC0000022L 很有意义。假设您希望以不需要密码的用户身份运行此仅 root 脚本:
user@host:~$ ls -lah /usr/local/bin/script.sh
-rwx------ 1 root root ... script.sh
使用 visudo,用户行应该是:
user ALL=(root) NOPASSWD: /usr/local/bin/script.sh
这样,仅针对该命令免除密码要求。
答案3
有两件事需要考虑。
首先,如果您发现每次输入密码sudo
都很乏味,请按照@mirimir的建议进行操作,并将“/etc/sudoers”文件编辑为以下内容:
yourusername ALL=(root) NOPASSWD: ALL
或者
yourusername ALL=(ALL) NOPASSWD: ALL
永远修复它:-)。
其次,检查脚本的所有者。我很确定所有者和权限很重要。就这样改变了主人sudo chown root:root /path/to/script.sh
。还可以考虑将权限设置为 744 sudo chmod 744 /path/to/script.sh
。