
Mac OS X에 동시에 실행하려는 .command
파일 폴더(일반 작업)가 있습니다.
지금은 디렉토리의 각 파일을 하나씩 반복하여 실행했습니다. 다음과 같은 것을 사용하십시오:
#!/bin/bash
LAUNCHLOG=~/Desktop/My\ Automation/Resources/Logs/_AutoLaunchAgent.txt
mkdir -p ~/Desktop/My\ Automation/Resources/Logs/
mkfile -n 0k "$LAUNCHLOG"
chmod 0777 "$LAUNCHLOG"
FILES=`find -f ~/Desktop/My\ Automation/Resources/Temp/`;
while read -r line; do
"$line" >>"$LAUNCHLOG"
done <<< "$FILES"
sleep 10
위의 코드는 작동하지만 속도가 매우 느립니다. 속도상의 이유로 명령(디렉토리의 모든 항목)을 즉시 실행하고 싶습니다.
명령은 모두 서로 독립적이며 통신이 필요하지 않습니다. 이 작업을 수동으로 수행하면 모든 것이 잘 작동하고 속도가 크게 향상됩니다...
이를 달성하는 가장 좋은 방법은 무엇입니까? while 루프에서 괄호를 사용하여 각 반복마다 새 하위 쉘에서 실행하려고 시도했지만 프로세스는 여전히 한 번에 하나의 파일을 실행합니다.
답변1
백그라운드에서 스크립트를 시작하면 루프가 기다리지 않고 원하는 작업을 수행할 수 있습니다.
while read -r line; do
(bash "$line" >>"$LAUNCHLOG") &
done <<< "$FILES"
하지만 로그는 로그 파일에 혼합됩니다...
답변2
한번 시도해 보는 것은 어떨까요 /usr/sbin/periodic
? period.conf를 사용하여 로깅을 제어하거나 출력을 로그 파일로 리디렉션할 수 있습니다.
/usr/sbin/periodic ~/Desktop/My\ Automation/Resources/Temp/ >> /path/to/logfile