Linux新手在这里。
我有一个perl脚本,它需要两个命令行input。 我试图在后台运行它,但这是我得到的:
[~user]$ nohup sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv & [2] 19603 [~user]$ nohup: appending output to `nohup.out'
系统返回“nohup:将输出追加到nohup.out”后,不会出现新的提示。 然后只要我input其他命令,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
我已经看了这个post,并尝试执行“sudo date”之前执行该命令。 仍然有同样的事情。 http://www.sudo.ws/pipermail/sudo-users/2003-July/001648.html
这里的问题,恕我直言,不是nohup,但后台处理sudo。
您正在将该进程置于后台(&,在命令结束时),但可能sudo需要密码身份验证,这就是进程停止的原因。
尝试其中之一:
1)从命令结尾删除“&”符号,回复passord提示符并将后缀放在后台(通过输入CTRL-Z – 停止进程并发出bg命令将其发送到后台)
2)将/ etc / sudoers更改为不要求用户密码:myusername ALL =(ALL)NOPASSWD:ALL
如果除了密码回复你的应用程序等待其他输入,那么你可以管输入命令是这样的:$ cat responses.txt | sudo mycommand.php
心连心
解决方案是使用-b标志来sudo在后台运行该命令:
$ sudo -b ./ascii_loader_script.pl 20070502 ctm_20070502.csv
如果您希望程序在您关闭当前终端会话之后继续运行,则只应使用nohup
你必须先使用sudo,nohup秒。
sudo nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
首先,你应该切换sudo
和nohup
。 接着:
if sudo echo Starting ... then sudo nohup <yourProcess> & fi
echo Starting ...
可以由任何不太多的命令取代。 我只用它作为sudo
虚拟命令。
通过这个在if条件中的sudo
触发密码检查。 如果没问题,那么sudo
会话将被登录,第二次调用将会成功,否则if
将会失败并且不会执行实际的命令。
这应该工作
sudo -b -u userName ./myScript> logFile
我只是想知道,我可以发送这个logFile作为一个电子邮件后./myScript成功运行在后台。
我打开一个编辑器,输入这些行:
#!/bin/bash sudo echo Starting ... sudo -b MyProcess
( MyProcess是我想以超级用户身份运行的任何东西。)
然后,将我想要的文件保存为MyShellScript.sh。
然后更改文件权限以允许执行。 然后在终端上运行。 “-b”选项告诉sudo在后台单独运行进程,所以进程在终端会话终止后继续运行。
在linux-mint中为我工作。
尝试:
xterm -e "sudo -b nohup php -S localhost:80 -t /media/malcolm/Workspace/sites &>/dev/null"
当你关闭xterm时,php web服务器仍然活着,
不要在“sudo”之前放置“nohup”,否则php web服务器在关闭xterm后会被终止。
您可以将其设置为您的别名。