( Note: blogspot မွာ script ေရးျပရတာ ေတာ္ေတာ္ စိတ္ညစ္စရာ ေကာင္းတာပဲ syntax အကုန္ေပ်ာက္ျပီး left align ေတြျဖစ္ကုန္တယ္ )
#! /bin/bash
# (script) init script
###
# chkconfig: 235 35 55
# description: Starting ( your script ) at boot up
case "$1" in
start)
/path/to/your/script &
echo "(script) is starting"
;;
stop)
kill -9 `ps -ef | grep (script) | grep -v grep| cut -d" " -f6`
echo "(script) is stopping"
;;
*)
exit 1
echo "Usage : /sbin/service (script) {start|stop}"
esac
exit 0
(script) ဆိုတဲ့ ေနရာေလးေတြ မွာ ကိုယ့္ script နဲ႕ အစားထိုးပါလို႕ဆိုျပီး ေပးလိုက္တယ္ ။ အဆင္ေျပသြားတယ္တဲ့ ။ Init script က ဒီ syntax နဲ႕ပဲ အလုပ္လုပ္ပါတယ္ ။ ကိုယ့္ဟာကိုယ္ တျခား script တစ္ခုခုကို စခ်င္လည္း ဒီ template ကိုသုံးလို႕ရပါတယ္ ။ အေရးၾကီးတာ No.4 လိုင္းပါ ။ အဲမွာ chkconfig 235 35 55 လို႕ေပးထားပါတယ္ ။
အေရွ႕ဆုံးက 235 ဆိုတာက ဒီ script ကို run မဲ့ runlevel ေတြပါ ။ Runlevel ဆိုတာ ဘာလည္းမေသခ်ာရင္ ရွာဖတ္ၾကည့္ေစခ်င္ပါတယ္။ ပံုမွန္အားျဖင့္ 0 to 6 ရွိပါတယ္ ။
0 = shutdown ၊
6 = reboot ၊
1 = single user mode
2 = multi-user mode without networking
3 = multi-user mode with networking
4 = User-definable
5 = multi-user mode with networking + GUI
ဒီ init script မွာဆို လိုခ်င္တဲ့ service / script ကို runlevel 2 , 3 နဲ႕ 5 မွာပဲ စမယ္လို႕ ေျပာထားပါတယ္ ။
အေနာက္က 35 နဲ႕ 55 က script ကို boot up time မွာစမဲ့ priority နဲ႕ shutdown time မွာ kill မဲ့ priority ပါ။ /etc/rcx.d/ ထဲမွာ script ေတြကို S55httpd ၊ K55httpd ဆိုျပီး အေရွ႕မွာ Sxx ၊ Kxx ေတြနဲ႕ ရွိေလ့ရွိပါတယ္။ ဒါကဘာကို ေဖာ္ျပတာလည္းဆိုရင္ ၊ ဆိုၾကပါစို႕ rc3.d ထဲမွာ S10sshd နဲ႕ S55httpd ဆိုျပီးရွိတယ္ ။ ဒါဆို တကယ္လို႕ server က runlevel 3 ကို run တယ္ဆိုရင္ Inittab က rc3.d ထဲက start script ေတြကို အစီအစဥ္အလိုက္ စပါတယ္ ။ ဒီမွာဆို S10 ျဖစ္တဲ့ sshd က အရင္စပါလိမ့္မယ္ ၊ ေနာက္မွ S55 ျဖစ္တဲ့ httpd က စပါလိမ့္မယ္။ အဲေတာ့ ကိုယ့္ script ကို ေစာေစာစီးစီး စေစခ်င္ရင္ အဲမွာ 35 ေနရာမွာ နံပါတ္ေသးေသး ေပးရပါလိမ့္မယ္ ။ rcx.d ကို ဖြင့္ၾကည့္ရင္ ကိုယ့္ script က ဘယ္အခ်ိန္ေလာက္မွာ စရင္ အဆင္ေျပမလည္း စဥ္းစားလို႕ရမွာပါ။ အေနာက္က 55 က လည္း ထိုနည္းတူပါပဲ ။ Shutdown လုပ္တဲ့အခ်ိန္မွာ ေစာေစာ kill ေစခ်င္ရင္ နံပါတ္ေသးေသးေပးပါ။ ေနာက္ဆုံးမွ kill ေစခ်င္ရင္ 99 လို႕ေပးလိုက္ပါ။
ဒီ init script က သူ run ခ်င္တာကို root အေနနဲ႕ run ဖို႕ ေရးထားတာပါ ။ တကယ္လို႕ တျခား user အေနနဲ႕ run ခ်င္ရင္ လိုင္းနံပါတ္ 9 မွာ su ကိုသုံးရပါမယ္ ။ ဒါဆို ဒီလိုျဖစ္သြားမယ္
su username -c /path/to/your/script &
Stop လုပ္တဲ့ အပိုင္းကေတာ့ လြယ္လြယ္ကူကူ PID ကိုရွာျပီး kill လိုက္တာပဲ ေရးထားပါတယ္ ။
ျပီးရင္ေတာ့ ဒီ init script ေလးကို /etc/init.d/ ေအာက္ထဲမွာ သြားထားရပါမယ္။ testscript လို႕ filename ကိုေပးလိုက္တယ္ ဆိုပါေတာ့။ ျပီးရင္ ဒါကို executable ျဖစ္ေအာင္ ေပးရပါတယ္။ ဒီ command ကို႐ိုက္ပါ ။
# chmod +x /etc/init.d/testscript
ျပီးရင္ chkconfig မွာ register လုပ္ရပါတယ္ ။ /etc/init.d ေအာက္ထဲမွာရွိတိုင္း rcx.d မွာမရွိပါဘူး ။ အဲထဲကို သက္ဆိုင္ရာ S နံပါတ္ K နံပါတ္နဲ႕ ေရာက္ေအာင္က register ရပါတယ္ ။
# chkconfig --add testscript
အဲဒါျပီးရင္ ကိုယ့္ရဲ့ script က server bootup တိုင္းမွာ သူ့ဘာသာသူ start ေနပါလိမ့္မယ္
( Note : rcx.d ဆိုတာ nix နဲ႕ နဲနဲ ရင္းႏွီးရင္ သိပါတယ္။ /etc ေအာက္မွာ rc1.d ၊ rc2.d ဆိုျပီး rc5.d အထိရွိပါတယ္ ။ သက္ဆိုင္ရာ runlevel မွာ စတဲ့ service ေတြရဲ့ start script ၊ stop script ေတြက အဲဒီထဲမွာရွိပါတယ္ ။ )
Divinity
1 comment:
ရံုးေျပာင္းခါနီးမွ စာေတြ ဘာေတြေရးလို႕ပါလား။
Post a Comment