unix - UNIX 中作业的并行运行

标签 unix loops parallel-processing

我有以下作业(仅作为示例)在unix(bash shell)集群计算机中运行:

### job1
mkdir file01
cp *.map  flex01
date > out
cd ..

### job2
mkdir file02
cp *.map  flex02
date > out
cd ..

### job3
mkdir file03
cp *.map  flex03
date > out
cd ..

### job4
mkdir file04
cp *.map  flex04
date > out
cd ..

如果我提交这些工作,我们会一一完成。但我想并行运行它们意味着job1到job4在后台同时运行。

我该怎么做?抱歉这个简单的问题,我是unix新手。

最佳答案

cd 命令似乎不是一个好主意;您不需要cd进入目录。您可能还想将日期信息附加到输出文件中,而不是总是破坏它。您似乎更有可能将 map 文件复制到刚刚创建的目录中。所以,你可能会写:

(mkdir flex01; cp *.map flex01; echo "Job 1: $(date)" >> out) &
(mkdir flex02; cp *.map flex02; echo "Job 2: $(date)" >> out) &
(mkdir flex03; cp *.map flex03; echo "Job 3: $(date)" >> out) &
(mkdir flex04; cp *.map flex04; echo "Job 4: $(date)" >> out) &

wait

这会将每个命令序列作为单独的后台作业运行,然后等待所有命令完成后再继续。您也可以考虑使用循环来完成此任务。

for n in $(seq 1 4)
do
    (mkdir flex0$n; cp *.map flex0$n; echo "Job $n: $(date)" >> out) &
done

您还可以考虑使用mkdir -p flex01,这样在尝试创建已存在的目录时就不会收到错误消息。 (或者您可以测试错误,如果存在则不复制,或者在运行 mkdir 之前测试是否存在,或者如果它已经存在,则在复制之前将其清除,或者...)

关于unix - UNIX 中作业的并行运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10670285/

相关文章:

perl - 文件中恰好需要 1 个尾随换行符

windows - 使用 Powershell 的 UNIX 格式文件

perl - 重命名期间是否有文件 "doesn' t 存在”?

c# - 在并行循环之间保留 ThreadLocal 是好还是坏?

linux - grep 对返回文本的限制

ios - 在 Swift 中循环遍历 Realm 对象字段

c - 尽管只调用了一次 srand(),但 rand() 重复值

php - 没有结果的 Mysql 查询的 Echo 0

C#.net 4并行编程

memory - 并发写入同一内​​存地址