Ravindra BagaleCourses & study guides English

Shell Scripting Complete 11: trap, Signals, flock Locks आणि Background Jobs

Scripts थांबवल्या जातात: कोणी Ctrl+C दाबतं, server shutdown होतो, किंवा timeout मारतो. एकाच cron job च्या दोन copies एकदम सुरू होऊन त्याच files साठी भांडू शकतात. या chapter मधे signals (INT, TERM, HUP, KILL), EXIT आणि ERR वर cleanup साठी trap, kill आणि timeout, & ने background jobs, wait, jobs, fg, bg, nohup आणि disown, अनेक jobs safely parallel चालवणं, आणि फक्त एक copy चालेल याची खात्री करायला flock शिकाल. प्रत्येक topic रोजच्या उदाहरणाने सुरू होतो आणि मग अनेक industries ची उदाहरणं.

या chapter मध्ये तुम्ही काय शिकाल

  • Common signals आणि numbers समजा
  • EXIT, INT, TERM आणि ERR वर trap ने cleanup
  • Background jobs चालवा आणि wait
  • Logout नंतर jobs चालू ठेवा
  • Parallel jobs limit करा
  • flock ने फक्त एक copy

1. रोजचं उदाहरण: रात्री दुकान बंद करणं

हे का लागतं?

लक्ष्मी रोडच्या साडी दुकानात बंद करताना ठराविक routine असतो: cash मोजा, lights बंद करा, shutter लावा. मालकाला अचानक जावं लागलं तरी shutter लावतोच. चावी एकाच व्यक्तीकडे, म्हणून दोन लोक एकदम दुकान उघडत नाहीत. trap म्हणजे तो closing routine, signals म्हणजे बंद करण्याची कारणं, आणि flock म्हणजे ती एकच चावी.

हे काय आहे?

Closing routine = trap cleanup EXIT. अचानक जाणं = INT (Ctrl+C) किंवा TERM. Power cut = KILL, कोणताही routine पकडू शकत नाही. Parallel काम करणारे helpers = & ने background jobs. सगळे helpers संपेपर्यंत थांबणं = wait. एक चावी = flock.

कसं करायचं (step by step)

Safe long script चं आयुष्यflock -n ने lock घ्याmktemp ने temp filestrap cleanup EXIT set& ने jobs सुरूसगळ्यांसाठी waitExit; trap temp files काढतो
KILL (-9) trap होत नाही, म्हणून शेवटचा उपाय.

2. Signals आणि kill

हे का लागतं?

अडकलेला process थांबवणं, nginx ला reload सांगणं, किंवा job का मेला हे बघणं, सगळ्याला signals लागतात.

हे काय आहे?

Signal म्हणजे process ला छोटा message. INT (2) म्हणजे Ctrl+C. TERM (15) सभ्य stop आणि kill चा default. HUP (1) बहुदा config reload. KILL (9) लगेच थांबवतो आणि पकडता येत नाही. STOP आणि CONT pause आणि resume. kill -l list करतो. Signal N ने मारलेला process 128+N ने exit होतो, म्हणून 130 INT आणि 143 TERM.

SignalNumber आणि वापर
HUP1, config reload
INT2, Ctrl+C
KILL9, force, trap नाही
TERM15, सभ्य stop
STOP/CONTpause/resume

कसं करायचं (step by step)

  1. Signals list.
kill -l | head -2

Output:

 1) SIGHUP  2) SIGINT  3) SIGQUIT  4) SIGILL
 9) SIGKILL 15) SIGTERM

याचा अर्थ: Names आणि numbers.

  1. सभ्य stop.
kill 4321; sleep 2; ps -p 4321 || echo gone

Output:

gone

याचा अर्थ: आधी TERM.

  1. nginx reload.
sudo kill -HUP $(cat /run/nginx.pid)

याचा अर्थ: Config reload, downtime नाही.

  1. नावाने.
pkill -f 'python report.py'

याचा अर्थ: पूर्ण command line match.

  1. Signal चा exit code.
sleep 100 & kill $!; wait $!; echo $?

Output:

143

याचा अर्थ: 128+15.

3. trap: EXIT, INT, TERM वर cleanup

हे का लागतं?

Script थांबल्यावर temp files, अर्धे downloads आणि lock files मागे राहू नयेत.

हे काय आहे?

trap 'commands' SIGNALS ते signals आल्यावर commands चालवतो. trap cleanup EXIT, KILL सोडून कोणत्याही कारणाने script संपली की चालतो, म्हणून cleanup साठी सगळ्यात चांगली एकच जागा. INT आणि TERM trap करून message print करा आणि 130 किंवा 143 ने exit. Single quotes वापरा म्हणजे trap चालताना variables वाचले जातात. trap - EXIT काढतो; trap -p current traps दाखवतो.

कसं करायचं (step by step)

  1. Exit वर cleanup.
tmp=$(mktemp -d); trap 'rm -rf "$tmp"' EXIT; echo work > "$tmp/a"; ls "$tmp"

Output:

a

याचा अर्थ: Script संपल्यावर folder गेला.

  1. Ctrl+C message.
trap 'echo "stopped by user" >&2; exit 130' INT; sleep 60

Output:

^Cstopped by user

याचा अर्थ: Clean stop.

  1. Function style.
cleanup(){ rm -f /tmp/report.$$; echo 'cleaned'; }; trap cleanup EXIT INT TERM

Output:

cleaned

याचा अर्थ: सगळ्या exits साठी एक जागा.

  1. Traps दाखवा.
trap -p

Output:

trap -- 'cleanup' EXIT

याचा अर्थ: काय set आहे ते.

4. trap ERR आणि fail होणारी line

हे का लागतं?

300 lines ची script रात्री 2 ला fail झाली तर log ने कोणती line आणि कोणता command ते सांगावं.

हे काय आहे?

trap '...' ERR कोणताही command fail झाला की चालतो (set -e सारखे नियम). आत $LINENO line, $BASH_COMMAND command आणि $? code. set -E जोडा म्हणजे functions आणि subshells ला ERR trap मिळतो.

कसं करायचं (step by step)

  1. Failure report.
set -Eeuo pipefail
trap 'echo "ERR line $LINENO: $BASH_COMMAND (rc=$?)" >&2' ERR
cp /nope /tmp/

Output:

cp: cannot stat '/nope': No such file or directory
ERR line 3: cp /nope /tmp/ (rc=1)

याचा अर्थ: नेमकी जागा.

  1. Error वर alert.
trap 'curl -fsS -d "backup failed line $LINENO" "$HOOK"' ERR

याचा अर्थ: Line सह chat alert.

5. Background jobs: &, jobs, fg, bg, wait

हे का लागतं?

पाच servers वर एकेक copy करायला एकत्र करण्यापेक्षा पाचपट वेळ लागतो.

हे काय आहे?

cmd & cmd background मधे सुरू करतो आणि लगेच परत येतो. $! त्याचा PID. jobs या shell चे jobs list करतो, fg %1 एकाला समोर आणतो, Ctrl+Z समोरचा job pause करतो आणि bg तो background मधे resume करतो. wait सगळ्यांसाठी थांबतो; wait $pid एकासाठी थांबून त्याचा exit code देतो, म्हणून कोणी fail झालं का कळायला codes गोळा करा. wait -n पुढचा संपेपर्यंत थांबतो.

कसं करायचं (step by step)

  1. सुरू करा आणि बघा.
sleep 30 & jobs

Output:

[1]+  Running   sleep 30 &

याचा अर्थ: Job 1.

  1. PID.
sleep 30 & echo "pid $!"

Output:

pid 5120

याचा अर्थ: kill किंवा wait सह.

  1. Parallel copy.
for h in web1 web2 web3; do scp -q app.tgz "$h:/tmp/" & done; wait; echo 'all copied'

Output:

all copied

याचा अर्थ: तीन एकदम.

  1. प्रत्येक result.
pids=(); for h in web1 web2; do ssh "$h" uptime & pids+=($!); done; fail=0; for p in "${pids[@]}"; do wait "$p" || fail=1; done; echo fail=$fail

Output:

10:01 up 9 days
10:01 up 3 days
fail=0

याचा अर्थ: कोणी fail झालं का कळतं.

  1. Pause आणि resume.
tar czf big.tgz /data   # press Ctrl+Z
bg; jobs

Output:

[1]+  Running   tar czf big.tgz /data &

याचा अर्थ: Background मधे गेलं.

6. Logout नंतर टिकणं: nohup, disown, setsid

हे का लागतं?

SSH वरून सुरू केलेलं long data migration Wi-Fi गेल्यावर मरतं, protect केलं नाही तर.

हे काय आहे?

Terminal बंद झाल्यावर jobs ना HUP मिळतो आणि बहुदा थांबतात. nohup cmd & HUP ignore करतो आणि output nohup.out मधे. disown चालू job shell पासून वेगळा करतो म्हणून HUP जात नाही. setsid नव्या session मधे सुरू करतो. खऱ्या long-running कामासाठी reattach करता येणारं tmux किंवा screen, किंवा services साठी systemd unit.

कसं करायचं (step by step)

  1. nohup.
nohup ./migrate.sh > migrate.log 2>&1 &

Output:

[1] 6012

याचा अर्थ: Logout पासून safe.

  1. nohup विसरलात.
./long.sh & disown; exit

याचा अर्थ: Exit नंतरही चालतं.

  1. tmux मार्ग.
tmux new -s mig './migrate.sh'

याचा अर्थ: Ctrl+B D ने detach, tmux a -t mig ने attach.

7. Parallel jobs limit

हे का लागतं?

500 downloads एकदम सुरू केले तर machine crash होऊ शकतं किंवा server block करू शकतो.

हे काय आहे?

जास्तीत जास्त N jobs चालू ठेवा: नवा सुरू करण्याआधी jobs -rp ने N किंवा जास्त दिसले तर एक संपेपर्यंत wait -n. xargs -P N दुसरा सोपा मार्ग: list मधून एकावेळी N चालवतो. Install असेल तर GNU parallel जास्त powerful.

कसं करायचं (step by step)

  1. wait -n सह max 4.
while read -r u; do (( $(jobs -rp | wc -l) >= 4 )) && wait -n; curl -fsSO "$u" & done < urls.txt; wait

याचा अर्थ: कधीच 4 पेक्षा जास्त नाही.

  1. xargs -P.
xargs -P 4 -n 1 curl -fsSO < urls.txt

याचा अर्थ: एकावेळी 4.

  1. Parallel logs compress.
find /var/log/app -name '*.log' -mtime +1 -print0 | xargs -0 -P 3 -n 1 gzip

याचा अर्थ: 3 gzip एकदम.

8. फक्त एक copy: flock

हे का लागतं?

Cron job दर 5 मिनिटांनी चालतो पण कधी 7 मिनिटं घेतो, तर दोन copies overlap होऊन data खराब होतो.

हे काय आहे?

flock file वर lock घेतो. flock -n /tmp/x.lock cmd, दुसऱ्या कोणाकडे lock नसेल तरच cmd चालवतो, नाहीतर लगेच exit 1. -n शिवाय तो थांबतो; -w 30, 30 seconds पर्यंत थांबतो. Script मधे exec 9>/tmp/x.lock; flock -n 9 || exit 1 वापरा, आणि script संपली की lock सुटतो, crash झाली तरी. pid file आहे का तपासण्यापेक्षा हे खूप safe.

प्रकारवागणं
flock -n f cmdlocked असेल तर skip
flock f cmdlock साठी थांब
flock -w 30 f cmdmax 30 s थांब
exec 9>f; flock -n 9पूर्ण script lock

कसं करायचं (step by step)

  1. Cron मधे.
*/5 * * * * flock -n /tmp/sync.lock /opt/bin/sync.sh

याचा अर्थ: Overlaps skip.

  1. दुसरी copy.
flock -n /tmp/sync.lock sleep 60 & sleep 1; flock -n /tmp/sync.lock echo hi; echo rc=$?

Output:

rc=1

याचा अर्थ: Lock पहिल्याकडे.

  1. Script header.
exec 9>/var/lock/backup.lock
flock -n 9 || { echo 'backup already running' >&2; exit 1; }

Output:

backup already running

याचा अर्थ: Exit वर आपोआप सुटतो.

  1. Limit सह wait.
flock -w 30 /tmp/deploy.lock ./deploy.sh || echo 'gave up after 30s'

Output:

gave up after 30s

याचा अर्थ: थोडा वेळ queue.

9. अनेक industries मधली खरी उदाहरणं

हे का लागतं?

तेच Linux skill प्रत्येक प्रकारच्या company मध्ये लागतं. वेगवेगळ्या ठिकाणी पाहिलं की लक्षात राहतं.

हे काय आहे?

प्रत्येक row म्हणजे एक काल्पनिक team. कोण हे वापरतं आणि कसं ते दाखवते.

कसं करायचं (step by step)

Team आणि शहरते कसं वापरतातCommand
Kiran, stock broking, Mumbaiदर मिनिटाला single-copy price importflock -n /tmp/px.lock ./import.sh
Sarah, research lab, BostonCtrl+C वर scratch dirs cleantrap 'rm -rf "$tmp"' EXIT
Arjun, travel, Goa50 hotels चे APIs parallel pingxargs -P 10 -n 1 curl -fs
Chen, gaming, ShenzhenGame server config reloadkill -HUP "$pid"
Maria, logistics, MadridLogout टिकणारं migrationnohup ./migrate.sh &
Tejas, dairy co-op, KolhapurFailure वर line numbertrap 'echo line $LINENO' ERR

10. नेहमीच्या errors आणि त्यांचे fixes

हे का लागतं?

हे errors सगळ्यांना येतात. कारण माहीत असलं की तास वाचतात.

हे काय आहे?

आधी नेमका message वाचा. मग खालच्या row शी जुळवा.

कसं करायचं (step by step)

दिसणारा errorका होतंFix कसा करायचा
Temp files left after Ctrl+Ctrap नाहीtrap cleanup EXIT जोडा.
trap 'rm -rf "$tmp"' EXIT
Process ignores killTERM पकडतो किंवा D state मधे अडकलाथांबा, शेवटी -9.
kill -9 PID
Job died after SSH droppedLogout वर HUPnohup किंवा tmux.
nohup ./job.sh &
Two cron runs corrupt dataOverlapflock -n वापरा.
flock -n /tmp/j.lock ./j.sh
wait: pid is not a child of this shellदुसऱ्या shell मधे jobफक्त तुमच्या jobs वर wait.
wait $!
Script reports success though a background job failedसाधा wait 0 देतोप्रत्येक pid wait करून check.
wait "$p" || fail=1
flock: command not foundutil-linux नाहीutil-linux install.
sudo dnf install -y util-linux
Trap shows old valueDouble quotes लवकर expandSingle quotes.
trap 'echo $x' EXIT
Machine slow after loopखूप parallel jobswait -n किंवा xargs -P ने limit.
xargs -P 4

11. Troubleshooting step by step

हे का लागतं?

Jobs गायब, अडकले किंवा overlap होत असतील तर processes, signals आणि locks बघा.

हे काय आहे?

वरून खाली जा. ज्या step ला problem दिसतो तिथे थांबा.

कसं करायचं (step by step)

  1. Jobs list.
jobs -l
  1. Process शोधा.
pgrep -af sync.sh
  1. Process tree.
ps -ef --forest | grep -A3 sync
  1. Lock कोणाकडे?
sudo lsof /tmp/sync.lock
  1. Traps.
trap -p
  1. Exit code.
wait $!; echo $?

12. Lab 1: trap cleanup आणि Ctrl+C handling

हे का लागतं?

Temp folder बनवून slow काम करणारी आणि normally संपली किंवा Ctrl+C दाबलं तरी folder नेहमी काढणारी script लिहा.

हे काय आहे?

पूर्ण hands-on lab. प्रत्येक step test Linux machine वर करा (EC2 instance, VM किंवा WSL).

कसं करायचं (step by step)

  1. Script.
cat > ~/slow.sh <<'X'
#!/usr/bin/env bash
set -euo pipefail
tmp=$(mktemp -d)
cleanup(){ rm -rf "$tmp"; echo "cleaned $tmp"; }
trap cleanup EXIT
trap 'echo "stopped by user" >&2; exit 130' INT TERM
for i in 1 2 3 4 5; do echo "step $i" > "$tmp/s$i"; sleep 2; done
echo done
X
chmod +x ~/slow.sh
  1. Normal run.
~/slow.sh

Output:

done
cleaned /tmp/tmp.Ab12Cd
  1. Ctrl+C दाबा.
~/slow.sh   # Ctrl+C after 3 s; echo rc=$?

Output:

^Cstopped by user
cleaned /tmp/tmp.Xy34Zq
rc=130
  1. दुसऱ्या terminal मधून.
~/slow.sh & sleep 3; kill $!; wait $!; echo rc=$?

Output:

stopped by user
cleaned /tmp/tmp.Pq56Rs
rc=130
  1. Temp नाही.
ls -d /tmp/tmp.* 2>/dev/null | wc -l

Output:

0

13. Lab 2: flock guard सह parallel jobs

हे का लागतं?

6 fake jobs चालवा, एकावेळी max 3, पूर्ण script flock ने protect करा, आणि दुसरी copy नाकारली जाते हे सिद्ध करा.

हे काय आहे?

पूर्ण hands-on lab. प्रत्येक step test Linux machine वर करा (EC2 instance, VM किंवा WSL).

कसं करायचं (step by step)

  1. Script.
cat > ~/par.sh <<'X'
#!/usr/bin/env bash
exec 9>/tmp/par.lock
flock -n 9 || { echo 'already running' >&2; exit 1; }
for i in 1 2 3 4 5 6; do
  (( $(jobs -rp | wc -l) >= 3 )) && wait -n
  ( sleep 2; echo "job $i done" ) &
done
wait; echo all done
X
chmod +x ~/par.sh
  1. वेळ.
time ~/par.sh

Output:

job 1 done
job 2 done
job 3 done
job 4 done
job 5 done
job 6 done
all done
real 0m4.0s
  1. दोन copies.
~/par.sh & sleep 0.5; ~/par.sh; echo rc=$?; wait

Output:

already running
rc=1
  1. Clean.
rm ~/par.sh /tmp/par.lock

Ravindra Bagale's Tip

Put three lines at the top of every long or scheduled script: a flock guard, a mktemp temp folder, and trap cleanup EXIT. Then use kill (TERM) before kill -9, and wait on each background PID so a hidden failure never looks like success.

14. नेहमी विचारले जाणारे प्रश्न

प्र. KILL trap करता येतो?

नाही, STOP पण नाही.

प्र. EXIT vs INT trap?

EXIT प्रत्येक शेवटी चालतो.

प्र. $! काय?

शेवटच्या background job चा PID.

प्र. Crash वर flock lock सुटतो?

हो, kernel सोडतो.

प्र. nohup vs tmux?

tmux reattach करू देतो.

प्र. exit 130 का?

INT साठी 128+2.

प्र. wait -n ला काय?

bash 4.3+.

प्र. NFS वर flock?

टाळा; local disk.

15. मुलाखत प्रश्न आणि उत्तरं

Beginner level

प्र. Ctrl+C काय पाठवतो?

INT.

प्र. Background मधे?

& जोडा.

प्र. Default kill signal?

TERM 15.

प्र. Jobs list?

jobs.

Mid level level

प्र. कोणत्याही exit वर cleanup?

trap cleanup EXIT.

प्र. Logout टिकणं?

nohup किंवा tmux.

प्र. Cron overlap थांबवा?

flock -n.

प्र. सगळ्या jobs साठी थांबा?

wait.

Senior level

प्र. pid files पेक्षा flock का?

Atomic आणि आपोआप सुटतो.

प्र. Fail झालेला background job?

प्रत्येक PID wait करून codes.

प्र. Fail line?

$LINENO आणि set -E सह trap ERR.

प्र. Graceful shutdown क्रम?

TERM, wait, मग KILL.

घरी करून बघा

  1. एकावेळी max 3 ने 10 images download करून किती fail झाले ते print करणारी script लिहा.
  2. तुमच्या एका जुन्या script ला trap जोडा म्हणजे temp files नेहमी काढल्या जातील.

सराव Tasks

या scenario बद्दल

Amravati Agro Market हा अमरावती मधला शेती व्यवसाय आहे. Anjali Thakre त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 21

सोपं Cleanup trap

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: Anjali Thakre ने Amravati Agro Market मधे work मधे temp folder बनवला. Script संपल्यावर आपोआप काढा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Temp folder

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: Safe temp folder बनवा आणि path work मधे ठेवा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Signals list

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: Signal number 15 चं नाव print करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Polite stop

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: Process 5150 ला SIGTERM ने politely थांबवा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Jobs list

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: या shell च्या background jobs चे फक्त PIDs print करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं सगळ्यांची वाट

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: फक्त PID 5150 च्या background job ची वाट पाहा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं स्वतःचा PID

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: Current shell चा PID print करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं नावाने PID

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: nginx नावाच्या processes चे PIDs शोधा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Foreground

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: Job 2 foreground ला आणा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Pause

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: Script 5 seconds थांबवा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Ctrl+C पकडा

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: Ctrl+C वर script stopped by user print करून exit 130.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Hangup ignore

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: Current script SIGHUP ignore करेल असं करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Force kill

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: TERM ignore करणारा process 4321 force-kill करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम शेवटचा background PID

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: शेवटच्या background job चा PID print करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Lock किंवा skip

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: /tmp/backup.lock lock खाली backup.sh चालवा, आधीच lock असेल तर लगेच skip.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Time limit

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: report.sh चालवा, 60 seconds पेक्षा जास्त चालला तर kill.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम नावाने reload

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: nginx नावाच्या processes ना नावाने SIGHUP पाठवा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

मध्यम Trap काढा

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: INT वरचा trap काढा म्हणजे Ctrl+C पुन्हा normal.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

अवघड 30s पर्यंत थांबा

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: /tmp/sync.lock खाली sync.sh चालवा, lock साठी जास्तीत जास्त 30 seconds थांबा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

अवघड Disown

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: Job 2 list मधे ठेवा पण logout वर shell त्याला SIGHUP पाठवणार नाही असं करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

अवघड Parallel 4

का: BIZ jobs नी cleanup करायला हवा आणि एकाच वेळी दोनदा चालू नये.

काय करायचं: xargs ने या folder मधल्या .log files 4 एकावेळी gzip करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

थोडक्यात सांगायचं तर

  1. TERM सभ्य, KILL force, INT म्हणजे Ctrl+C.
  2. नेहमी trap cleanup EXIT.
  3. $LINENO सह trap ERR.
  4. & आणि wait; प्रत्येक PID check.
  5. Long कामासाठी nohup, disown, tmux.
  6. एका copy साठी flock -n.

उजळणी, तुलना आणि मुलाखत cards

हा lesson काही मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR हा lesson उघडतो.

trap cleanup. Temp folder बनवा. कोणत्याही exit वर clean. Ctrl+C पकडा. Errors report.
उजळणी card: trap cleanup · PNG download करा · Card page उघडा
फक्त एकदा चालवा. दोन cron runs overlap होऊ शकतात. Lock किंवा skip. 30 s पर्यंत थांबा. Exit वर lock सुटतो.
उजळणी card: फक्त एकदा चालवा · PNG download करा · Card page उघडा
SIGTERM vs SIGKILL. Polite, trap होतो. / Forced, trap होत नाही.
तुलना: SIGTERM vs SIGKILL · PNG download करा · Card page उघडा
nohup vs systemd service. Logout नंतर टिकतो. / Managed आणि restart.
तुलना: nohup vs systemd service · PNG download करा · Card page उघडा
आधी kill -9 का नाही?. TERM cleanup करू देतो. KILL trap होत नाही. Order.
मुलाखत card: आधी kill -9 का नाही? · PNG download करा · Card page उघडा
trap EXIT vs INT?. EXIT कोणत्याही end ला. INT फक्त Ctrl+C ला. Cleanup EXIT वर.
मुलाखत card: trap EXIT vs INT? · PNG download करा · Card page उघडा
Logout नंतर job चालू?. nohup HUP ignore. किंवा running job disown. Best: systemd service.
मुलाखत card: Logout नंतर job चालू? · PNG download करा · Card page उघडा
Parallel jobs limit?. xargs -P N. किंवा loop मधे wait -n. Server flood करू नका.
मुलाखत card: Parallel jobs limit? · PNG download करा · Card page उघडा

अजून cards: Ravi Sir's Cards.