bash 脚本仅在上一个代码完成后运行多个C++代码



我想在 Linux 集群上使用 bash 脚本运行多个C++代码。我能够做到这一点,但是由于多个代码在集群上同时运行,它变得很慢。因此,我想使用 bash 脚本运行这些模拟,这样,下一个代码只有在前一个代码完成后才会开始运行。

我现在一直在通过指定它可能运行的小时数来使用 sleep 命令,但由于我不知道之前的运行时间,所以效率非常低。下一个代码必须等到睡眠时间结束。

这就是我当前的 bash 脚本的样子

#!/bin/bash
cd /home/Rectilinear_box_Loverl_16
make clean
make -f Makefile
echo "L/l = 16 started"
./Rod input_file.xml > log &
sleep 14h
echo "L/l = 16 completed"
cd /home/Rectilinear_box_Loverl_14
make clean
make -f Makefile
echo "nL/l = 14 started"
./Rod input_file.xml > log &
sleep 14h
echo "L/l = 14 completed"
cd /home/Rectilinear_box_Loverl_12
make clean
make -f Makefile
echo "nL/l = 12 started"
./Rod input_file.xml > log &
echo "L/l = 12 completed"

每个代码需要不同的时间才能完成,但我指定了安全的最长时间。

有人可以建议一个好方法吗?

删除& 。它们使您的计算在后台执行。

./Rod input_file.xml > log &

可以是:

./Rod input_file.xml > log

如果不在后台运行程序,则在特定运行完成之前,它不会移动到下一个命令。

例如,删除睡眠命令并执行以下操作:

./Rod input_file.xml > log

而不是:

./Rod input_file.xml > log &

删除指示它应该运行的与号。 另外,我建议将其放在顶部: 触摸日志

并使用>>而不是>追加到日志。

您可以启动后台进程(在此示例中sleep 5是后台进程(并等待它。试试这个例子:

#!/bin/bash
# Do job #1
sleep 5 &
sleeppid=$!
# Wait for job #1 to finish
echo sleep started: $(date)
wait "$sleeppid"
echo sleep ended: $(date)
# Do job #2
sleep 5 &
sleeppid=$!
# Wait for job #2 to finish
echo sleep started: $(date)
wait "$sleeppid"
echo sleep ended: $(date)

最新更新