Ngibhekabheka inethiwekhi kazwelonke ngathola i i-athikili ethokozisayo (engiletha lapha ngombhalo ngoba ichazwe ngobuciko) lapho umbhali wayo asikhombisa khona ukuthi singenza kanjani ukuthi imibhalo yethu yeBash ibe namandla ngokuqinile isebenzisa izicupho.
Yenza imibhalo yakho ye-bash ibe namandla kakhulu ngezicupho
Cabanga ukuthi unombhalo we-bash osebenza nsuku zonke njalo emahoreni ayisithupha nokuthi kwesinye isikhathi uyaphazamiseka noma lowo mbhalo usebenza kabili ngasikhathi sinye. Lezi zimo ezimbili azikhululekile neze ngoba zidinga ukungenelela komuntu ukuze kulungiswe noma ngezikhathi ezithile zingenakudingidwa, kushiye uhlelo lusesimweni esingahambelani. Isixazululo salokhu, phakathi kokunye, ukusebenzisa izingibe.
Izicupho kuyindlela elula nephumelelayo yokulawula ukukhishwa kwemibhalo ye-bash. Masibuyele esimeni esifanayo sokuqala, uma iskripthi simiswa ngesandla, ngokwesibonelo nge-ctrl-c, iphazamisekile ukubuyisa isignali yokukhipha
INT
futhi uma kugcina ngo-
kill
lapho-ke umphumela uzoba
TERM
.
Onke amakhodi wokuphuma angabukwa ngawo
kill -l
Noma kunjalo, okusetshenziswa kakhulu kunembile
INT, ISIKHATHI, Phuma
Uma iskripthi siqukethe, isibonelo, sokuvumelanisa kwefayela ne-
rsync
into enengqondo kunazo zonke ukuthembela kufayela lokukhiya elingavumeli iskripthi ukuthi sisebenze ngasikhathi sinye:
LOCK = "/ var / run / rsync.lock" uma [! -e $ Khiya]; bese uthinta i- $ LOCK rsync -avz foo bar rm $ LOCK else echo "rsync is already running" fi
NgeSpanish esicacile, iskripthi esingenhla sihlola ukuthi ngabe ifayela lokukhiya likhona yini nokuthi uma lingekho, liyakha bese lenza umyalo ohambisanayo, ekugcineni lisuse ifayela lokukhiya. Uma ifayela likhona, iskripthi simane sithumele umlayezo kumsebenzisi okhombisa ukuthi umyalo usuvele uyasebenza.
Kodwa-ke uma kunesimo esinenkinga kungenzeka ukuthi ifayela lokukhiya alisuswanga, konakalise imiphumela engafuneki. Isixazululo silula:
LOCK = "/ var / run / rsync.lock" uma [! -e $ Khiya]; bese ubamba "rm -f $ LOCK; phuma" INT TERM EXIT touch $ LOCK rsync -avz foo bar rm $ LOCK trap - INT TERM EXIT else echo "rsync is already running" fi
Ukucaciswa kwalesi sixazululo ukuthi umyalo ufakwe ogibeni, ukuze kuthi lapho kutholwa isignali
INT, ISIKHATHI, Phuma
iskripthi siyama bese sisula ifayela lokukhiya.
Kuyafaneleka ukusho ukuthi kungaba nesimo sokuncintisana kuskripthi esingenhla phakathi kwesikhathi lapho ifayela lokukhiya liqinisekiswa nesikhathi elenziwa ngaso. Isixazululo esisodwa esingaba khona ukusebenzisa i-redirect ne-bash's noclobber mode engaqondisi kufayela elivele likhona:
LOCK = "/ var / run / rsync.lock" uma (set -o noclobber; echo $$> "$ LOCK") 2> / dev / null; bese ubamba 'rm -f "$ LOCK"; phuma $? ' I-INT TERM EXIT rsync -avz foo bar rm -f $ LOCK trap - INT TERM EXIT enye i-echo "rsync isivele isebenza: $ (cat $ LCK)" fi
Okucacile kwalokhu kwamuva ukuthi kusetshenziswa njengoba bengishilo, imodi ye-noclobber nokuthi ifayela lokukhiya liqukethe i-PID yenqubo esebenzayo.
Kuyafaneleka futhi ukusho ukuthi kunezinye izixazululo ezinjenge
flock
o
solo
kepha kulokhu okuthunyelwe bengifuna ukwabelana ngezixazululo ngezinsizakusebenza zika-bash. Ungafunda okwengeziwe mayelana Nezicupho ngalokhu umhlahlandlela omuhle kakhulu.
Kuhle! Siyabonga ngokwabelana.
I-athikili enhle, vele ushintshe 'echo "rsync isivele isebenza: $ (cat $ LCK)"' to 'echo "rsync is already running: $ (cat $ LOCK)"'
Phendula ngokucaphuna
I-athikili ethakazelisa kakhulu, yebo mnumzane! Lokhu ngiyakugcina.
Kungumyalo owusizo kakhulu ukugcina engqondweni. Ngiwusebenzise kuskripthi engisishicilele kokuthunyelwe, ukususa amanye amafayela owenziwe iskripthi lapho simiswa.
Kuyathakazelisa kakhulu, yebo mnumzane.