我正在尝试在通过ssh连接的远程Linux服务器上运行一系列测试。
这是我试过的:
#!/usr/bin/env bash
# Assembling a list of commands to be executed sequentially
TESTRUNS="";
for i in `ls ../testSet/*`;
do
MSG="running test problem ${i##*/}";
RUN="mySequentialCommand $i > results/${i##*/} 2> /dev/null;";
TESTRUNS=$TESTRUNS"echo $MSG; $RUN";
done
#run commands with nohup to be able to log out of ssh session
nohup eval $TESTRUNS &
但看起来nohup与eval的表现并不太好。 有什么想法吗?
答案 0 :(得分:1)
&
。是的。
并且RUN
中不需要nohup
,因为您使用&执行命令。
现在,您的脚本在for循环中构建命令,但不执行它。这意味着您将只运行最后一个文件。如果要运行所有文件,则需要在循环中执行&
命令。但是 - 您无法使用nohup eval $TESTRUNS
运行命令,因为这将在后台运行命令并返回到脚本,该脚本将执行循环中的下一个项目。最终,这将并行运行所有文件。
在for循环中移动&
,但再次,您无法使用run the script itself with nohup
运行它。你需要做的是function createSheet() {
var _container = document.getElementById("container");
checkbox = document.createElement("input");
checkbox.type = "checkbox";
var valueOfId = document.getElementById("idString").checked;
,脚本将在后台循环遍历所有文件,即使在shell关闭后也是如此。
答案 1 :(得分:0)
您可以查看screen
,这是nohup的替代功能。我将使用while [ 1 ]; do printf "."; sleep 5; done
替换您的测试用于测试screen
解决方案
命令screen -ls
是可选的,只显示正在发生的事情。
prompt> screen -ls
No Sockets found in /var/run/uscreens/S-notroot.
prompt> screen
prompt> screen -ls
prompt> while [ 1 ]; do printf "."; sleep 5; done
# You don't get a prompt. Use "CTRL-a d" to detach from your current screen
prompt> screen -ls
# do some work
# connect to screen with batch running
prompt> screen -r
# Press ^C to terminate the batch (script printing dots)
prompt> screen -ls
prompt> exit
prompt> screen -ls
Google for screenrc,了解如何自定义界面。
您可以将脚本更改为
#!/usr/bin/env bash
# Assembling a list of commands to be executed sequentially
for i in ../testSet/*; do
do
echo "Running test problem ${i##*/}"
mySequentialCommand $i > results/${i##*/} 2> /dev/null
done
如果您未在屏幕内使用nohup scriptname &
或简单screen
,则可以使用scriptname
启动上述脚本。