隔离使用 HOME 环境变量保存状态的 CLI 程序以执行并行执行

隔离使用 HOME 环境变量保存状态的 CLI 程序以执行并行执行

背景: 使用 CLI 实用程序将某些状态保存在用户的主目录中 - 在 Linux 和 Unix 上使用"$HOME"环境变量中的位置。该程序在 Jenkins 作业中的 shell 脚本中执行。每当运行的两个作业使用不同的程序输入时,就会发生冲突,因为程序的状态保存在$HOME目录中。

尝试将实用程序与作业运行隔离,我想到了更改$HOME环境变量,这似乎适用于有限的测试:

if [ -d "newhome" ]; then
  echo "newhome dir already exists"
  rm -r newhome 
fi
mkdir newhome
old_home="$HOME"
HOME="./newhome"

# rest of shell script is here

HOME="$old_home"

可能有多个作业使用相同的实用程序,甚至同一作业的多个并发运行。这种变化会对其他环境、其他工作等产生什么影响吗?我应该使用chroot还是其他方法?

答案1

除了脚本实际上删除了newhome脚本中的静态字符串这一事实之外,我认为此解决方法没有严重问题。

newhome如果有并发进程运行同一脚本,则删除该目录将是一个问题,因为该目录可能会被新进程删除,而旧进程仍在使用它。

相关内容