명령어를 수집하고 지속적으로 실행할 수 있는 애플리케이션이 있나요? 이는 동시에 실행하면 안 되는 여러 명령을 실행하려고 할 때 도움이 됩니다. 실행 중인 명령과 다가오는 명령을 볼 수 있는 작은 창을 갖는 것도 흥미로울 것입니다.
"리눅스 쉘 배치 목록"을 검색했지만 아무 것도 찾을 수 없습니다.
답변1
batch
전통적으로 이런 종류의 작업을 위해 다중 사용자 환경에서 사용되었습니다 . 특정 공유 컴퓨터에서 3명이 작업한다고 상상해 보세요. 누구나 자신의 프로그램을 컴파일하고 싶어할 수 있지만, 큰 방해 없이 편집할 수 있도록 한 번에 하나의 컴파일만 실행하고 싶어합니다. 누구나 자신만의 명령을 내릴 수 있으며 시스템은 각 명령을 순서대로 처리합니다.
echo cc a.c |batch
echo make projectUser2 |batch
echo make projectBUser3 |batch
각 빌드는 순차적으로 실행됩니다.
at
이 명령을 얻으려면 패키지를 설치해야 합니다 batch
.
sudo apt-get install at
그러나 자신의 컴퓨터에서 단일 사용자인 경우 간단히 파일을 편집하고 각 명령을 해당 줄에 입력할 수 있습니다. 예를 들어 fileWithCommands
다음 콘텐츠가 포함된 파일 이름을 생성한다고 가정해 보겠습니다 .
cc a.c
make projectUser2
make projectBUser3
bash를 받아 사용하세요.
bash ./fileWithCommands
다른 답변은 더 많은 정보 보고를 제공하기 위해 더 많은 bash 쉘 명령 언어를 사용합니다.
출력을 파일로 저장하려면
bash ./fileWithCommands >ouput.log`
이렇게 하면 오류가 터미널에 보고됩니다. 오류를 동일한 파일로 올바르게 리디렉션하려면 다음 명령을 사용하세요.
bash ./fileWithCommands >outputWithErrors.log 2>&1
답변2
배우기 매우 쉽지만 단일 답변에 합리적으로 맞추려면 더 많은 지식이 필요한 쉘 스크립트를 찾고 있는 것 같습니다.
나는 다음을 읽는 것이 좋습니다:
여기에는 쉘 스크립트 작성을 시작하는 데 필요한 거의 모든 정보가 포함되어 있습니다. 또한 귀하가 방문하고 있는 사이트는 쉘 스크립팅을 위한 훌륭한 리소스입니다. 이 연구를 완료하면서 필요한 만큼 많은 질문을 하되, 대답하기 쉽도록 특정 질문에 집중하도록 노력하십시오. 그러나 대부분의 질문은 이미 답변되었을 것이므로 검색 기능을 사용하여 원하는 답변을 찾을 수 있습니다.
귀하의 특정 질문에 더 적합한 답변을 찾기 위해 실행 중인 명령을 모니터링할 수 있는 다음 기능을 제안했습니다.
run_command () {
local command=($@)
printf '%s' "Running: ${command[*]}..."
if out=$("${command[@]}" 2>&1); then
printf '%s\n' 'Successful'
printf '%s\n' "$out"
else
printf '%s\n' 'Failed'
printf '%s\n' "$out"
fi
}
이를 bash 스크립트에 넣고 다음과 같은 명령을 내릴 수 있습니다.
#!/bin/bash
run_command () {
local command=($@)
printf '%s' "Running: ${command[*]}..."
if out=$("${command[@]}" 2>&1); then
printf '%s\n' 'Successful'
printf '%s\n' "$out"
else
printf '%s\n' 'Failed'
printf '%s\n' "$out"
fi
}
run_command sleep 1
run_command sleep 2
run_command ls -ltr ~/tmp
run_command ls -ltr /fake/dir
다음과 유사한 출력이 생성됩니다.
$ ./script.sh
Running: sleep 1...Successful
Running: sleep 2...Successful
Running: ls -ltr /Users/jessebutryn/tmp...Successful
total 8
-rwxr-xr-x 1 jessebutryn staff 337 Mar 30 07:41 script.sh
Running: ls -ltr /fake/dir...Failed
ls: /fake/dir: No such file or directory
답변3
Linux 셸과 CRON 서비스는 이를 수행하는 간단한 방법을 제공합니다. 여기서는 간단한 BASH 스크립트를 작성하여 사용된 루트 파티션의 비율을 가져와 로그에 기록한 다음 10초 후에 사용 가능한 실제 여유 메모리를 확인하고 이를 추가합니다. 동일한 로그 파일에. CRON을 사용하여 5분마다 이 작업을 실행하겠습니다.
스크립트: run_commands.sh
[user ~]# cat run_commands.sh
#!/bin/bash
LOG=/home/user/command.log
DISK=`df -h| grep -w / | awk '{print $5}'`
echo `date -u` "" "Root PART % Used" = $DISK >> $LOG
sleep 10
REALMEM=`free -m | awk 'NR==2{print $4}'`
echo `date -u` "" "Real FREE Memory in MB" = $REALMEM >> $LOG
exit
이제 CRON이 5분마다 이 스크립트를 실행하도록 합니다.
crontab -e
*/5 * * * * /home/user/run_commands.sh
wq:
tail -f
이제 로그 파일 command.log를 실행하여 작동하는지 확인해 보겠습니다.
[user ~]# tail -f command.log
Sat Mar 30 13:40:01 UTC 2019 Root PART % Used = 11%
Sat Mar 30 13:40:11 UTC 2019 Real FREE Memory in MB = 482
Sat Mar 30 13:45:01 UTC 2019 Root PART % Used = 11%
Sat Mar 30 13:45:11 UTC 2019 Real FREE Memory in MB = 482
쉘 스크립트와 CRON은 제가 거의 매일 사용하는 도구입니다. 매개변수 유효성 검사와 오류 검사가 없으므로 스크립트는 매우 기본적입니다. 하지만 간단하고 작업이 완료됩니다.
-표시
답변4
간단한 대답은 그렇습니다. 쉘 스크립트입니다. 이것이 기본이다
다음 내용으로 파일을 만듭니다.
#!/bin/bash
command1
command2
command3
etc
그런 다음 실행 가능하게 만듭니다.
chmod +X «the-file-name»
무슨 일이 일어나고 있는지의 흔적을 보고 싶다면. 그런 다음 set -x
두 번째 줄로 추가합니다 ( #!/bin/bash
추적하려는 명령 뒤(첫 번째 줄이어야 함)와 앞에).
./«the-file-name»
필요한 위치 ./
또는 기타 위치 정보(예 : )를 입력하여 스크립트를 실행합니다 «another-directory-name»/«the-file-name»
.