SSH를 통해 Mac 컴퓨터에서 Linux 컴퓨터로 시뮬레이션을 실행했습니다. 현재 여러 명령을 병렬로 실행하고 있으며(백그라운드에 배치함) 작업이 완료되면 관심 있는 파일을 추출한 다음 모든 명령 출력을 삭제하고 다시 실행합니다.
필요한 파일을 자동으로 추출하고 동일한 명령을 다시 실행할 수 있도록 PID를 사용하여 이러한 작업이 완료되었는지 확인할 수 있는지 궁금합니다. ssh -c를 통해 실행되는 명령의 PID를 가져오는 방법을 알아보기 위해 여기에 메시지를 게시합니다. 이는 제가 수행한 작업이 아닙니다(원격 Linux에 있기 때문에).
나는에 표시된 솔루션을 시도했습니다.방금 시작된 프로세스의 PID를 얻는 방법PID를 얻으려면 $! ssh -c나 jobs -p 모두 올바른 PID를 제공하지 않았습니다. 원격으로 접속해서 작동하지 않는 것인지(htop에 나타나는 명령은 ssh -c...입니다.) 아니면 그냥 잘못하고 있는 것인지 궁금합니다.
이것은 내 첫 번째 bash 스크립트입니다.
#!/bin/bash
./createFiles.sh $1 # create the needed $1 folders
for i in $(seq 1 $1)
do
cd $i
myCommand &
cd ..
done
이 작업이 완료되면 다음을 사용합니다.
#!/bin/bash
for i in $(seq 1 $1)
do
cd $i
cp output/file.txt ../file_$2_$i.txt # $2 is the number of the run
cd ..
done
./deleteFiles.sh $2 # delete the needed $1 folders to start anew
그런 다음 이 두 루프를 5번 반복했습니다. 컴퓨터 앞에 서지 않고도 자동으로 5회 반복이 가능한지 궁금했습니다.
누구든지 좋은 아이디어가 있다면 :)
추신: 분명히 말씀드리지만 영어는 제 모국어가 아닙니다. 안녕하세요
답변1
GNU Parallel을 구축하고 있습니다 :)
--transfer --return --cleanup이 원하는 작업을 수행하고 있습니다.
8장을 읽어보세요:https://zenodo.org/record/1146014
답변2
@mashuptwice의 답변 덕분에 이 작업을 수행할 수 있었습니다(예: 를 사용하여 $$
스크립트 내부에서 PID를 얻을 수 있음 pgrep
).
그런 다음 bash를 사용하여 원하는 위치를 얻었습니다 while
. :D-s
sleep
투명성을 위해:
#!/bin/bash
for j in $(seq 1 $2)
do
./createFiles.sh $1 # create the needed $1 folders
for i in $(seq 1 $1)
do
cd $i
myCommand &
cd ..
done
sleep 5 # Wait to be sure that the commands were started
pgrep -u myUser myCommand > PIDs.txt
while [ -s PIDs.txt ]
do
echo not finished yet
pgrep -u myUser myCommand > PIDs.txt
sleep 10
done
cat PIDs.txt # Debug print
./mvFiles.sh $1 $j # extract the needed files and remove the now useless outputs
rm PIDs.txt
done