Linux_제1 6 장 학습 총화
제1 6 장: 스 크 립 트 제어
이 장의 내용
处理信号
以后台模式运行脚本
禁止挂起
作业控制
修改脚本优先级
脚本执行自动化
16.1 처리 신호
16.1.1 리 눅 스 신호 복습
Linux 시스템 신호
Linux利用信号与运行在系统中的进程进行通信
可以使用信号来停止/启动/终止进程
可以通过对脚本进行编程,使其在收到特定信号时执行某些命令,从而控制shell脚本
默认情况下,bash shell会忽略收到的任何3和15信号
但是bash shell会处理1和2信号
일반적인 Linux 시스템 신호
信号:值:描述
1:SIGHUP:挂起进程
2:SIGINT:终止进程
3:SIGQUIT:停止进程
9:SIGKILL:无条件终止进程
15:SIGTERM:尽可能终止进程
17:SIGSTOP:无条件停止进程,但不是终止进程
18:SIGTSTP:停止或暂停进程,但不终止进程
19:SIGCONT:继续运行停止的进程
16.1.2 신호 생 성
1. 프로 세 스 중단
Ctrl + C 조합 키 를 사용 하면 2 (SIGINT) 신 호 를 생 성하 여 현재 셸 에서 실행 중인 모든 프로 세 스에 보 냅 니 다.
명령 을 집행 하 다
sleep 100
^C
Ctrl 키
2. 프로 세 스 일시 정지
Ctrl + Z 조합 키 를 사용 하면 18 (SIGTSTP) 신 호 를 생 성하 고 셸 에서 실행 중인 모든 프로 세 스 를 정지 합 니 다.
명령 을 집행 하 다
sleep 100
^Z
Ctrl + Z 조합 키 를 누 르 면 bash 셸 은 다음 과 같은 힌트 를 줍 니 다.
[1]+ Stopped sleep 100
方括号中的数字时shell分配的作业号(job number)
shell将shell中运行的每个进程称为作业,并为每个作业分配唯一的作业号
如果shell回话中有已停止的作业,在退出shell时,bash会提醒你
상용 조작
ps -l
查看已停止的作业,在S列中(进程状态)显示T的为已停止的作业
kill -9 PID
终止指定PID的作业,终止已停止作业的PID
通俗来讲,就是杀掉进程
16.1.3 포획 신호
명령 형식: trap commands signals 명령 설명: trap 명령 을 사용 하여 셸 스 크 립 트 를 감시 하고 셸 에서 차단 할 Linux 신 호 를 지정 합 니 다.
trap 명령 을 사용 하여 SIGINT 신 호 를 무시 합 니 다.
test 1. sh 스 크 립 트 작성
#!/bin/bash
trap "echo 'Sorry!I have trappend Ctrl-C'" SIGINT
echo This is a test script
count=1
while [ $count -le 10 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count+1 ]
done
echo "This is the end of the test script"
16.1.4 캡 처 스 크 립 트 종료
셸 스 크 립 트 의 종료 EXIT 신호 캡 처
test 2. sh 스 크 립 트 작성
#!/bin/bash
trap "echo Goodbye..." EXIT
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count+1 ]
done
16.1.5 캡 처 수정 또는 제거
신호 캡 처 를 수정 하면 스 크 립 트 는 최초의 trap 명령 에 따라 처 리 됩 니 다.
test 3. sh 스 크 립 트 작성
#!/bin/bash
#
trap "echo 'Sorry.. Ctrl+C is trapped.'" SIGINT
#
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count+1 ]
done
#
trap "echo 'I modified the trap!'" SIGINT
#
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count+1 ]
done
trap 와 신호 목록 사이 에 두 개의 폴 더 를 추가 하여 설 정 된 캡 처 를 삭제 하고 기본 행동 을 복원 합 니 다.
test3b. sh 스 크 립 트 작성
#!/bin/bash
#
trap "echo 'Sorry.. Ctrl+C is trapped.'" SIGINT
#
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count+1 ]
done
#
# Remove the trap
trap -- SIGINT
echo "I just removed the trap"
#
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 1
count=$[ $count+1 ]
done
노크: trap 명령 후 단일 폴 더 를 사용 하여 신 호 를 회복 하 는 기본 행동 도 할 수 있 습 니 다.싱글 폴 더 와 더 블 폴 더 는 모두 정상적으로 역할 을 발휘 할 수 있다.
16.2 이후 데스크 톱 모드 에서 스 크 립 트 실행
16.2.1 백 스테이지 실행 스 크 립 트
명령 후 & 문자 추가 후 데스크 톱 모드 에서 셸 스 크 립 트 를 실행 합 니 다.
test 4. sh 스 크 립 트 작성
#!/bin/bash
count=1
while [ $count -le 10 ]
do
sleep 1
count=$[ $count+1 ]
done
명령 을 집행 하 다
./test4.sh &
그리고 [1] 3231 개의 괄호 안에 백 엔 드 프로 세 스 를 나타 내 는 작업 번 호 를 표시 합 니 다. 뒤의 숫자 는 프로 세 스 의 프로 세 스 ID (PID) 입 니 다.
배경 프로 세 스 가 실 행 될 때 도 터미널 모니터 를 사용 하여 stdOUT 와 stdERR 메 시 지 를 표시 합 니 다.
test 5. sh 스 크 립 트 작성
#!/bin/bash
#
echo "Start the test script"
count=1
while [ $count -le 5 ]
do
echo "Loop #$count"
sleep 5
count=$[ $count+1 ]
done
#
echo "Test script is complete"
스 크 립 트 가 배경 모드 에서 실 행 될 때 스 크 립 트 의 출력 과 입력 명령, 명령 출력 이 모두 혼 합 됩 니 다. 배경 에서 실 행 된 스 크 립 트 의 stdOUT 와 stdERR 를 다시 설정 하여 복잡 한 출력 을 피 하 는 것 이 좋 습 니 다.
16.2.2 여러 배경 작업 실행
可以使用&符号的方法在命令行提示符下同时启动多个后台作业
使用ps命令查看所有脚本的运行状态
在终端会话中使用后台进程时一定要小心,当退出终端时,后台进程也会退出
16.2.3 비 콘 솔 에서 스 크 립 트 실행
명령 형식: nohup./test 1. sh & 명령 설명: nohup 명령 을 사용 하여 터미널 세 션 에서 셸 스 크 립 트 를 시작 하고 스 크 립 트 를 나중에 데스크 톱 모드 가 끝 날 때 까지 실행 합 니 다. 터미널 세 션 을 종료 하 더 라 도 셸 스 크 립 트 는 계속 실 행 됩 니 다.
명령 을 집행 하 다
nohup ./test1.sh &
cat nohup.out
설명 하 다.
使用nohup启动shell脚本时,脚本会忽略终端会话发过来的SIGHUP信号
由于nohup命令会解除终端与进程的关联,进程也就不在同STDOUT和STDERR关联
nohup命令会自动将STDOUT和STDERR的消息重定向到当前目录下名为nohup.out的文件中
如果使用nohup命令运行了另一个脚本,则该脚本的输出会被追加到已有的nohup.out文件中
16.4 작업 제어
작 동/정지/종료 및 복구 작업 의 이러한 기능 을 작업 제어 라 고 통칭 한다.
16.4.1 작업 보기
jobs 명령 을 사용 하여 셸 이 현재 처리 하고 있 는 작업 을 봅 니 다. 스 크 립 트 $$변 수 는 리 눅 스 시스템 이 이 스 크 립 트 에 할당 한 PID 를 표시 합 니 다.
test 10. sh 스 크 립 트 작성
#!/bin/bash
#
echo "Script Process ID: $$"
#
count=1
while [ $count -le 10 ]
do
echo "Loop #$count"
sleep 10
count=$[ $count + 1 ]
done
#
echo "End of script..."
#
명령 을 집행 하 다
./test10.sh > test10.out &
查看作业
jobs
查看作业的PID
jobs -l
jobs 명령 파라미터
参数:描述
-l:列出进程的PID以及作业号
-n:只列出上次shell发出的通知后改变了状态的作业
-p:只列出作业的PID
-r:只列出运行中的作业
-s:只列出已停止的作业
jobs 명령 출력 의 플러스 와 마이너스
带加号的作业会被当做默认作业
在使用作业控制命令时,如果未在命令行指定任何作业号,
该作业会被当做作业控制命令的操作对象
当前的默认作业完成处理后,带减号的作业成为下一个默认作业
任何时候都只有一个带加号的作业和一个带减号的作业,
不管shell中有多少个正在运行的作业
16.4.2 중 단 된 작업 을 다시 시작 합 니 다.
명령 형식: bg 작업 번호 명령 설명: 배경 모드 로 지정 한 작업 명령 형식 을 다시 시작 합 니 다: fg 작업 번호 명령 설명: 프론트 모드 로 지정 한 작업 을 다시 시작 합 니 다.
16.5 양보 도 조절
在多任务操作系统中(Linux就是),内核负责将CPU时间分配给系统上运行的每个进程
调度优先级是内核分配给进程的CPU时间(相对于其他进程)
在Linux系统中,由shell启动的所有进程的调度优先级默认都是相同的
调度优先级是个整数值,从-20(最高优先级)到+19(最低优先级)
默认情况下,bash shell以优先级0来启动所有进程
노크: 최저 치 - 20 은 최고 우선 순위 이 고 최고 치 는 19 는 최저 우선 순위 입 니 다. 이것 은 너무 헷 갈 리 기 쉽 습 니 다.좋 은 사람 은 하기 어렵다 '는 속담 만 기억 하면 된다."좋 음"또는 높 은 값 일수 록 CPU 획득 시간 이 적 습 니 다.
16.5.1 nice 명령
나 이 스 명령 - n 인 자 를 사용 하여 새로운 우선 순위 단 계 를 지정 합 니 다.
명령 을 집행 하 다
nice -n 10 ./test4.sh > test4.out &
查看作业信息
ps -p 3678 -o pid,ppid,ni,cmd
nice -10 ./test4.sh > test4.out &
ps -p 3706 -o pid,ppid,ni,cmd
16.5.2 renice 명령
renice 명령 을 사용 하여 실행 프로 세 스 PID 의 우선 순 위 를 지정 합 니 다.
명령 을 집행 하 다
./test4.sh &
ps -p 3742 -o pid,ppid,ni,cmd
renice -n 10 -p 3742
ps -p 3742 -o pid,ppid,ni,cmd
renice 명령 의 제한
只能对属于你的进程执行renice
只能通过renice降低进程的优先级
root用户可以通过renice来任意调整进程的优先级
16.6 정시 운행 작업
16.6.1 at 명령 으로 작업 수행 계획
1. at 명령 의 형식
명령 형식: at [- f filename] time 명령 설명: - f 매개 변 수 를 사용 하여 실행 할 스 크 립 트 파일 의 파일 이름 을 지정 합 니 다. time 매개 변 수 는 언제 실 행 될 지 설정 합 니 다.
다양한 시간 형식
标准的小时和分钟格式,比如10:15
AP/PM指示符,比如10:15PM
特定可命名时间,比如now,noon,midnight或teatime(4PM)
标准日期格式,比如MMDDYY,MM/DD/YY或DD.MM.YY
文本日期,比如Junl4或Dec25,加不加年份均可
也可以指定时间增量
当前时间+25min
明天10:15PM
10:15+7天
2. 작업 의 출력 가 져 오기
리 눅 스 시스템 에서 실 행 될 때 모니터 는 이 작업 과 연결 되 지 않 습 니 다.Linux 시스템 은 stdOUT 또는 stdERR 의 출력 을 메 일 시스템 을 통 해 사용자 에 게 보 냅 니 다.
test 13. sh 스 크 립 트 작성
#!/bin/bash
echo "This script ran at $(date +%B%d,%T)"
echo
sleep 5
echo "This is the script end..."
명령 을 집행 하 다
at -f test13.sh now
- M 옵션 을 사용 하여 작업 에서 발생 하 는 출력 정 보 를 차단 합 니 다.
test13b. sh 작성
#!/bin/bash
echo "This script ran at $(date +%B%d,%T)" > test13b.out
echo >> test13b.out
sleep 5
echo "This is the script end..." >> test13b.out
명령 을 집행 하 다
at -M -f test13b.sh now
cat test13b.out
3. 기다 리 는 숙제 목록
atq 명령 은 시스템 에서 어떤 작업 이 기다 리 고 있 는 지 확인 합 니 다. 작업 목록 작업 목록 에 작업 번호 가 표시 되 어 있 습 니 다. 시스템 이 이 작업 을 실행 하 는 날짜 와 시간 및 그 가 있 는 작업 대기 열 을 표시 합 니 다.
4. 작업 삭제
명령 형식: atrm 작업 번호 명령 설명: atrm 를 사용 하여 지정 한 작업 을 삭제 합 니 다.
16.6.2 정기 적 으로 실행 해 야 할 스 크 립 트 설정
1. cron 시간표
명령 형식: min hour dayofmonth month dayofweek command 명령 설명: cron 시간 표 는 작업 이 언제 실 행 될 지 특별한 형식 으로 지정 합 니 다.
형식 설명
dayofweek:文本(mon,tue,wed,thu,fri,sat,sun)或数值(0为周日,6为周六)
dayofmonth:表示月份中的日期值(1~31)
cron 실례
在每天的10:15运行一个命令
15 10 * * * command
在每周一4:15PM运行的命令
15 16 * * 1 command
在每个月的第一天中午12点执行命令
00 12 1 * * command
在每个月的最后一天执行命令
00 12 * * * if [‘date +%d -d tomorrow’ = 01]; then;command
说明:在每天中午12点检查是不是当月的最后一天,如果是,cron将会运行该命令
명령 을 집행 하 다
15 10 * * * /home/zc/test/unit16/test4.sh > test4.out
2. cron 시간표 구축
Linux 는 crontab 를 제공 하여 cron 시간 표를 처리 하고 cron 시간 표를 사용 하여 배정 한 작업 을 실행 합 니 다.
명령 형식: crontab - l 명령 설명: crontab - l 을 사용 하여 기 존 cron 시간 표를 표시 합 니 다.
3. cron 디 렉 터 리 탐색
만 든 스 크 립 트 가 정확 한 실행 시간 에 대한 요구 가 높 지 않 으 면 미리 설 정 된 cron 스 크 립 트 디 렉 터 리 를 사용 할 수 있 습 니 다.
네 개의 기본 디 렉 터 리
hourly:每小时执行
daily:每天执行
monthly:每月执行
weekly:每周执行
명령 을 집행 하 다
ls /etc/cron.*ly
4. anacron 프로그램
cron 프로그램 은 Linux 시스템 이 켜 진 상태 에서 만 정시 작업 을 수행 할 수 있 습 니 다. Linux 시스템 이 꺼 진 상태 에 있 을 때 정시 작업 을 수행 하지 않 습 니 다.
anacron 프로그램 을 사용 합 니 다. 리 눅 스 시스템 이 꺼 지면 어떤 작업 이 실행 시간 을 놓 쳤 다 는 것 을 알 고 리 눅 스 시스템 이 켜 지면 작업 을 빨리 실행 합 니 다.
anacron 프로그램 은 cron 디 렉 터 리 에 있 는 프로그램 만 처리 합 니 다. 예 를 들 어/etc/cron. monthly.
명령 형식: period delay identifier command 명령 설명: period 는 작업 이 얼마나 자주 실행 되 는 지, 하늘 단위 로 정의 합 니 다.
메모: anacron 프로그램 은/etc/cron. hourly 에 있 는 스 크 립 트 와 같은 실행 시간 이 하루 이하 인 스 크 립 트 를 처리 하지 않 습 니 다.
16.6.3 새 셸 시작 스 크 립 트 사용
새 셸 을 시작 할 때마다 bash 셸 은 $HOME/. bashrc 파일 을 실행 합 니 다.
검증 하 다.
在$HOME/.bashrc文件的最后加入:echo "I'm in a new shell"
然后保存,关闭shell终端
重新打开shell终端时,可以看见该提示语
소결
이 장 에 서 는 Liux 의 신호 제어, 배경 모드 로 스 크 립 트 를 실행 하고 시간 을 지정 하여 스 크 립 트 를 실행 하 며 스 크 립 트 의 우선 순위 등 을 설명 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.