我正在寻找策略建议。 我是Linux shell脚本的新手。刚刚学习tcsh不超过一个月。 我需要一个脚本来自动检测结果文件何时完成从远程服务器复制回远程计算机中的文件夹,然后启动scp文件回到我的工作站。 我不知道该作业何时完成运行,因此该文件夹可能很长时间没有结果文件。我也不知道最后的结果文件何时完成从远程服务器复制回文件夹(因此可以启动scp)。
我曾尝试过crontab。当我猜对了,工作正常,大多数时候只是令人失望。 所以我试着自己编写一个脚本,现在就拥有它。我打算制作一个为我和我的同事服务的脚本。 要使用该脚本,用户首先需要手动登录远程计算机。然后只在远程机器上执行脚本。该脚本首先要求用户输入他们希望保存结果文件的本地计算机名称和目录。 然后脚本将循环测试文件总数何时更改。当它检测到这意味着第一个结果文件开始从远程服务器复制回来时,它再次循环以检测文件夹中的总文件大小何时停止更改,这意味着最后的结果文件已完成复制到夹。之后,它执行scp将所有结果文件发送到最初指定目录的用户工作站。
脚本工作正常但我希望脚本能够在后台运行并且仍然可以自行运行,即使用户从远程计算机注销并关闭终端也是如此。而且我希望让用户只需在终端输入一个简单的命令来启动脚本,就像一个简单的
./script.tcsh
我尝试按命令运行脚本
./script.tcsh &
但失败了,因为后台进程无法接受用户输入。
谷歌发现了一些名为disown的东西,但找不到该命令。显然远程机器和我的机器不支持此命令。尝试修改脚本以首先接受用户输入,然后尝试使用
cat > temp_script.tcsh << EOF
{rest of my script}
EOF
然后一行
./temp_script.tcsh &
尝试创建另一个脚本文件并使用第一个脚本在后台启动第二个脚本。也失败了,因为cat不会将$ variable视为文字文本,而是将其替换为值。我有一个foreach i(1 2)循环,而cat命令只是保持报告错误(缺少变量i的值,这只是foreach循环语法中的一个计数器)。
此刻我不在乎。 任何人都可以通过我自己尝试的策略来启发我吗? 目标是只使用1个脚本文件,并提示用户输入2个(机器名和目录保存),然后不再与用户交互或等待,甚至可以运行关闭终端。
注意:我无需密码即可登录远程机器并返回。