sudo nohup 和重定向

sudo nohup 和重定向

尝试找出 sudoers 文件的正确 Cmnd_Alias

无需任何密码即可运行的命令如下:

sudo /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1

我添加到 sudoers 文件中的行是:

## Cmnd alias specification
Cmnd_Alias AXTOOLTTYSTART = /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1
Cmnd_Alias AXTOOLTTYSTOP = /etc/init.d/axtty stop
Cmnd_Alias AXTOOLTTYSTATUS = /etc/init.d/axtty status
Cmnd_Alias AXTOOLINTCTLSTART = /sbin/initctl start ttyp?
Cmnd_Alias AXTOOLINTCTLSTOP = /sbin/initctl stop ttyp?

## This will disable password request for the axtools commands
%sudoaxtools ALL=(root) NOPASSWD: AXTOOLTTYSTART, AXTOOLTTYSTOP, AXTOOLTTYSTATUS, AXTOOLINTCTLSTART, AXTOOLINTCTLSTOP
Defaults!AXTOOLTTYSTART !requiretty
Defaults!AXTOOLTTYSTOP !requiretty

提到的命令在脚本 (axopen) 内运行,由 sudoaxtools 组的成员或 root 的 crontab 执行

/usr/local/bin/axopen

#!/bin/sh

SUDO=''
if (( $EUID != 0 )); then
    SUDO='sudo'
fi

echo -n "Checking for open connections"
while netstat -d | grep -q axel
do
  ((c++)) && ((c==900)) && break
  echo -n "."
  sleep 4
done
echo "done"

echo "Starting axtty service.."
$SUDO /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1
sleep 4
$SUDO /etc/init.d/axtty status

当 axopen 通过 sudoaxtools 成员执行时,它仍然提示输入密码。我预计这是因为碎片>/dev/null 2>&1

中学

我使用 nohup 的原因是因为该服务由于某种原因不会启动,当简单地使用

sudo /etc/init.d/axtty start

因此,如果有人有想法来解决这个问题,那就太好了。

答案1

您不希望重定向作为 sudo 规则的一部分。 /etc/sudoers 包含执行的程序,并且重定向与 sudo 命令分开发生(在包含的 shell 级别):

(shell) sudo /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1

这会调用 sudo 并重定向输出; sudo 看到:

(sudo) /usr/bin/nohup /etc/init.d/axtty 启动

更改此 sudoers 行:

Cmnd_Alias AXTOOLTTYSTART = /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1

到:

Cmnd_Alias AXTOOLTTYSTART = /usr/bin/nohup /etc/init.d/axtty start

答案2

我最终将 nohup 脚本放入单独的 bash 脚本中。

/usr/local/bin/axttystart

#!/bin/sh

## Intermediate bashscript in order to sudo nohup properly
/usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1

Cmnd_alias然后将包含for的sudo'ers 行更改AXTOOLTTYSTART

Cmnd_Alias AXTOOLTTYSTART = /usr/local/bin/axttystart

更新的 axopen 脚本将代替直接 sudo 执行 nohup 行,sudoaxttystart脚本

#!/bin/sh

[...]

echo "Starting axtty service.."
$SUDO /usr/local/bin/axttystart
sleep 4
$SUDO /etc/init.d/axtty status

相关内容