Linux新手在这里。
我有一个perl脚本,需要两个命令行输入。我试图在后台运行它,但这就是我得到的:
[~user]$ nohup sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
[2] 19603
[~user]$ nohup: appending output to `nohup.out'
系统返回“nohup:将输出附加到'nohup.out'后”,不会出现新提示。然后只要我输入其他命令,shell就会告诉我进程已停止:
[~user]$ nohup sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
[2] 19603
[~user]$ nohup: appending output to `nohup.out'
ls
ascii_loader_script.pl format_wrds_trd.txt nohup.out norm_wrds_trd.cfg
[2]+ Stopped nohup sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv
我看过这篇文章并尝试在执行命令之前执行“sudo date”。仍然有同样的事情。 http://www.sudo.ws/pipermail/sudo-users/2003-July/001648.html
答案 0 :(得分:46)
解决方案是使用-b标志为sudo在后台运行命令:
$ sudo -b ./ascii_loader_script.pl 20070502 ctm_20070502.csv
如果您希望程序在关闭当前终端会话后继续
,则应该只使用nohup答案 1 :(得分:17)
这里的问题,imho,不是nohup,而是后台处理sudo。
您正在将该流程置于后台(& at command of command),但可能sudo需要密码身份验证,这就是流程停止的原因。
尝试以下方法之一:
1)从命令结尾删除&符号,回复passord提示符,然后将其放在后台(通过键入CTRL-Z - 停止进程并发出bg命令将其发送到后台)
2)通过包含以下行来更改/ etc / sudoers以不要求用户密码: myusername ALL =(ALL)NOPASSWD:ALL
如果除了密码回复之外您的应用程序等待其他输入,那么您可以将输入传递给命令,如下所示: $ cat respond.txt | sudo mycommand.php
HTH
答案 2 :(得分:4)
你必须首先使用sudo,nohup second。
sudo nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
答案 3 :(得分:1)
这应该有效
sudo -b -u userName ./myScript > logFile
我很想知道在./myScript在后台成功运行后,我可以将此logFile作为电子邮件发送。
答案 4 :(得分:1)
首先,您应该切换sudo
和nohup
。
然后:
if sudo echo Starting ...
then
sudo nohup <yourProcess> &
fi
echo Starting ...
可以替换为任何做不多的命令。
我只将它用作sudo
的伪命令。
由此,if条件中的sudo
触发密码检查。
如果没有问题则登录sudo
会话并且第二次调用将成功,否则if
将失败并且不执行实际命令。
答案 5 :(得分:1)
我打开一个编辑器并键入以下行:
{{1}}
(其中 MyProcess 是我想以超级用户身份运行的任何内容。)
然后我将文件保存在我想要的位置MyShellScript.sh。
然后更改文件权限以允许执行。 然后在终端中运行它。 “-b”选项告诉sudo在后台单独运行进程,因此进程在终端会话终止后继续运行。
在linux-mint工作。
答案 6 :(得分:1)
我在后台评估磁盘碎片的工作解决方案:
$ sudo nohup nice -20 find / -type f -exec filefrag "{}" \; | sed 's/^\(.*\): \([0-9]\+\) extent.*/\2\t\1/'| awk -F ' ' '$1 > 0' | sort -n -r | head -50 > filefrag.txt
$ bg 1
[1]+ sudo nohup nice -20 find / -type f -exec filefrag "{}" \; | sed 's/^\(.*\): \([0-9]\+\) extent.*/\2\t\1/' | awk -F ' ' '$1 > 0' | sort -n -r | head -50 > filefrag.txt &
答案 7 :(得分:0)
尝试:
xterm -e "sudo -b nohup php -S localhost:80 -t /media/malcolm/Workspace/sites &>/dev/null"
关闭xterm时,PHP
网络服务器仍处于活动状态
不要在nohup
之前放置sudo
,否则关闭xterm后会冻结PHP
网络服务器。
答案 8 :(得分:0)
您可以将其设置为别名:
sudo sh -c 'nohup openvpn /etc/openvpn/client.ovpn 2>&1 > /dev/null &'
答案 9 :(得分:0)
您可以尝试
sudo su
然后
nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
代替
nohup sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv &