【问题标题】:parallel command won't ignore config files并行命令不会忽略配置文件
【发布时间】:2022-07-24 03:10:17
【问题描述】:

我有一个使用 bash 命令的 bash 脚本parallel

我发现当我以非 root 用户身份运行脚本时,parallel 仍然会检查 /root/ 目录中是否有名为 .parallel 的配置文件

foo.sh

#!/bin/bash

parallel --semaphore --jobs=6 "echo hello"
parallel --semaphore --wait

以 root 身份运行脚本按预期工作。但是以非 root 身份运行会出现此错误

chown bob:bob foo.sh
sudo -u bob -g bob ./foo.sh
parallel: Error: Cannot change into non-executable dir /root/.parallel: Permission denied

我尝试使用 --plain 标志来忽略配置

parallel --semaphore --plain

我尝试使用指向 /dev/null 的配置

parallel --semaphore -C /dev/null

https://docs.oracle.com/cd/E86824_01/html/E54763/parallel-1.html

如何让并行命令不检查/root/.parallel 配置文件?

【问题讨论】:

  • 也许尝试将PARALLEL_HOME 设置为可写目录(例如export PARALLEL_HOME=$HOME)然后使用--plain 选项?
  • 尝试为sudo添加-H选项

标签: bash gnu-parallel


【解决方案1】:

运行时foo.sh$HOME的值是多少?

sudo -u bob -g bob ./foo.sh

如果$HOME 没有更改为/home/bob,而是保持/root,那么这将解释您所看到的。

您可以添加:

echo $HOME

foo.sh查看。

或者(如@jared_mamrot 所说)明确设置$PARALLEL_HOME

为什么 GNU Parallel 需要一个可写的目录?

--semaphore 通过在目录中创建文件来工作。

【讨论】:

    【解决方案2】:

    我们必须确保$HOME 是执行parallel --semaphore(或简称sem)的用户的可写文件夹,例如因此:

    export HOME=/tmp && parallel --semaphore <..>
    

    为什么? GNU Parallel 需要 $HOME 作为可写目录,并尝试写入 $HOME,默认情况下它是根拥有的文件夹 (/)。

    这是因为parallel --semaphore 需要在某个位置创建临时文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多