HOME 환경 변수를 사용하여 병렬 실행을 위한 상태를 저장하는 CLI 프로그램을 격리합니다.

HOME 환경 변수를 사용하여 병렬 실행을 위한 상태를 저장하는 CLI 프로그램을 격리합니다.

배경:"$HOME"CLI 유틸리티를 사용하여 Linux 및 Unix의 환경 변수에 있는 위치를 사용하여 사용자의 홈 디렉터리에 일부 상태를 저장합니다 . 프로그램은 Jenkins 작업 내의 쉘 스크립트에서 실행됩니다. 서로 다른 프로그램 입력을 사용하여 두 작업을 실행할 때마다 프로그램 상태가 $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동일한 스크립트를 실행하는 동시 프로세스가 있는 경우 디렉터리를 삭제하는 것은 문제가 됩니다. 이전 프로세스가 여전히 디렉터리를 사용하는 동안 새 프로세스에 의해 디렉터리가 삭제될 수 있기 때문입니다.

관련 정보