Answers:
ඔබට watch
විධානය භාවිතා කළ හැකිය , ඕනෑම නියම කරන ලද විධානයක් නියමිත වේලාවට ධාවනය කිරීම සඳහා ඔරලෝසුව භාවිතා කරයි.
පර්යන්තය විවෘත කර ටයිප් කරන්න:
watch -n x <your command>
x ඔබට අවශ්ය තත්පර කිහිපය ලෙස වෙනස් කරන්න.
watch
විධානය සහ එහි විකල්ප භාවිතා කරමින් වැඩි උදව් සඳහා, man watch
මෙම සබැඳිය ධාවනය කරන්න හෝ පිවිසෙන්න .
උදාහරණයක් ලෙස: පහත දැක්වෙන්නේ සෑම 60 දශකයකම එකම පර්යන්තයේ ඩෙස්ක්ටොප් නාමාවලියෙහි අන්තර්ගතය වන අතර එමඟින් යම් වෙනසක් සිදුවී ඇත්දැයි ඔබට දැනගත හැකිය:
watch -n 60 ls -l ~/Desktop
watch
"ඉතිහාසය සක්රීය" වර්ගයේ විධානය සමඟ භාවිතා කිරීමට ක්රමයක් තිබේද? මම භාවිතා කිරීමට watch
කැමතියි, නමුත් සමහර විට මම අන්තිම ක්රියාව වෙනුවට පෙර මරණ ද of ුවම පිළිබඳ ලොගයක් දැකීමට කැමැත්තෙමි. ඔව්, මම දන්නවා while true
මෙය ඉටු කිරීම සඳහා මට ස්ක්රිප්ටින් ( ) භාවිතා කළ හැකි බව , නමුත් watch
උපයෝගීතාව භාවිතා කිරීම එතරම් පිරිසිදුයි!
-bash: watch: command not found
, macOS 10.14.1
නූක්ස්ගේ පිළිතුරට අමතරව ඔබට මෙම විධානය ටර්මිනලයේ භාවිතා කළ හැකිය:
while true; do <your_command>; sleep <interval_in_seconds>; done
උදාහරණයක්
while true; do ls; sleep 2; done
මෙම විධානය ls
තත්පර 2 ක පරතරයකින් ප්රතිදානය මුද්රණය කරයි.
ක්රියාවලිය නැවැත්වීමට Ctrl+ භාවිතා කරන්න C.
එහි අඩුපාඩු කිහිපයක් තිබේ watch
watch
ගැලවීමේ අක්ෂර පසුකර යන -c
හෝ --color
විකල්පයක් භාවිතා කරමින් ANSI වර්ණ අනුක්රමය අර්ථ නිරූපණය කරයි . උදාහරණයක් ලෙස ප්රතිදානය pygmentize
ක්රියා කරන නමුත් එය අසාර්ථක වනු ඇත ls --color=auto
.ඉහත තත්වයන් තුළ මෙය වඩා හොඳ විකල්පයක් ලෙස පෙනෙන්නට පුළුවන.
watch
පවතින සඳහා, මම මේ කියන්න යන ටිකක් ද නිෂ්ඵල
watch
බොහෝ අවස්ථාවලදී හොඳයි. මා මුලින් “නූක්ස්ගේ පිළිතුරට අමතරව” සඳහන් කළේ එබැවිනි. නමුත් ගැටළු කිහිපයක් ඇත watch
. උදාහරණයක් ලෙස කෙනෙකුට අන්වර්ථ විධාන භාවිතා කළ නොහැකwatch
. ll
අන්වර්ථ වී ඇති ls -laF
නමුත් භාවිතා කළ නොහැකි උදාහරණයක් ගන්න watch
. යම් විධානයක ප්රතිදානය තරමක් දිගු නම් ඔබට අනුචලනය කිරීමේදී කරදරයක් වනු ඇත watch
. මෙම විශේෂ අවස්ථා කිහිපය තුළ මෙම පිළිතුර වඩා හොඳ විකල්පයක් ලෙස පෙනේ.
watch
අවම වශයෙන් මගේ අනුවාදය වර්ණවත් කළ නිමැවුම් සඳහා -c
හෝ --color
විකල්ප වලට ඉඩ දෙයි .
while sleep x
වඩා හොඳයි - මරා දැමීම පහසුය.
watch
, එය මෙන් නොව , එය විධාන ඉතිහාසය තබා ගනී.
යන්තම් වෙත තණතීරුව කිරීමට අවශ්ය souravc හා nux ගේ පිළිතුරු:
watch
උබුන්ටු මත පරිපූර්ණව ක්රියා කරන අතරම , ඔබේ "යුනික්ස්-ෆු" පිරිසිදු වීමට අවශ්ය නම් එය වළක්වා ගැනීමට ඔබට අවශ්ය වනු ඇත - නිදසුනක් ලෙස FreeBSD හි ඔරලෝසුව යනු "වෙනත් ටයිටි රේඛාවක් දෙස බැලීමට" විධානයකි.while true; do command; sleep SECONDS; done
ඔබේ අවවාදය CTR + C භාවිතා කර මරා දැමීමට අපහසු විය හැකිය . ඔබට කැමති වීමට අවශ්ය විය හැකිය while sleep SECONDS; do command; done
- එය කෙටි පමණක් නොව බාධා කිරීම පහසුය. අවවාදය නම්, එය පළමුව නිදාගෙන, පසුව ඔබේ විධානය ක්රියාත්මක කරන්න, එබැවින් SECONDS
පළමු විධානය සිදුවීමට පෙර ඔබ ටිකක් බලා සිටිය යුතුය .sleep
තුළ while
පුඩුවක්? මට කිසිදු වෙනසක් සොයාගත නොහැකි විය, Ctrl + C කුමක් වුවත් ක්ෂණිකව ලූපය බිඳ දැමීය .
command
ද sleep
සහ එකම ඔබ මැරුවොත් බිඳ true
.
cron
ආවර්තිත විධාන ක්රියාත්මක කිරීමට ඉඩ සලසන ඩීමන් සඳහා කදිම කාර්යයක් ලෙස පෙනේ. crontab -e
ඔබේ පරිශීලකයාගේ ක්රෝන් වින්යාසය සංස්කරණය කිරීම ආරම්භ කිරීමට විධානය ක්රියාත්මක කරන්න . එහි ආකෘතිය crontab (5) හි ලේඛනගත කර ඇත . මූලික වශයෙන් ඔබට කාලයට සම්බන්ධ, අවකාශයෙන් වෙන් වූ ක්ෂේත්ර පහක් ඇත, ඉන්පසු විධානයක් ඇත:
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sunday, or use names)
උදාහරණයක් ලෙස, සෑම අඟහරුවාදා දිනකම පයිතන් පිටපතක් ධාවනය කිරීමට ඔබ කැමති නම්, පෙ.ව. 11:
0 11 * * 1 python ~/yourscript.py
කාලය වෙනුවට ආදේශ කරන විශේෂ නම් කිහිපයක් ද @reboot
ඇත. ඔබට තාවකාලික නාමාවලියක් සෑදීමට අවශ්ය නම් ඉතා ප්රයෝජනවත් වේ. මගේ crontab වෙතින් (සමඟ ලැයිස්තුගත කර ඇත crontab -l
):
# Creates a temporary directory for ~/.distcc at boot
@reboot ln -sfn "$(mktemp -d "/tmp/distcc.XXXXXXXX")" "$HOME/.distcc"
cron
පර්යන්තයට වඩා තිරය පිටුපස දිව යයි
ඔබ ගොනු පද්ධතිය අධීක්ෂණය කරන්නේ නම්, inotifywait
එය දීප්තිමත් වන අතර නිසැකවම ඔබේ පද්ධතියට අඩු බරක් එක් කරයි.
උදාහරණයක් :
දී 1 වන පර්යන්තයේ මෙම විධානය යතුරු කරන්න:
$ inotifywait .
ඉන් පසුව 2 වන පර්යන්තයේ, වත්මන් බහාළුම බලපාන විධාන,
$ touch newfile
එවිට මුල් පර්යන්තයේ inotifywait අවදි වී සිද්ධිය වාර්තා කරනු ඇත
./ CREATE newfile2
නැත්නම් ලූපයක
$ while true ; do inotifywait . ; done
Setting up watches.
Watches established.
./ OPEN newfile2
Setting up watches.
Watches established.
./ OPEN newfile2
Setting up watches.
Watches established.
./ DELETE newfile
Setting up watches.
Watches established.
./ CREATE,ISDIR newdir
Setting up watches.
Watches established.
grep something InALogFile|less
එය ස්ක්රිප්ට් එකක් ද?
.
මට වඩා සරල විය හැකි දේ මට විධානයෙන් ඉවත් කළ නොහැක.
-m
පුඩුවක් නොමැතිව නිරන්තරයෙන් අධීක්ෂණය කිරීම සඳහා ඔබට එකතු කළ හැකි බව මම දැන් man පිටුවේ දුටුවෙමි .
repeat
පහත දැක්වෙන පියවරයන් අනුගමනය කරමින් ඔබට ඔබේම විධානයක් නිර්මාණය කළ හැකිය ; මෙහි බැර :
පළමුව, ඔබේ .bash_aliases
ගොනුව විවෘත කරන්න :
$ xdg-open ~/.bash-aliases
දෙවනුව, මෙම රේඛා ගොනුවේ පතුලේ අලවා සුරකින්න:
repeat() {
n=$1
shift
while [ $(( n -= 1 )) -ge 0 ]
do
"$@"
done
}
තෙවනුව, ඔබේ පර්යන්තය වසා නැවත විවෘත කරන්න, නැතහොත් ටයිප් කරන්න:
$ source ~/.bash_aliases
සහ වොයිලා! ඔබට දැන් එය මේ ආකාරයෙන් භාවිතා කළ හැකිය:
$ repeat 5 echo Hello World !!!
හෝ
$ repeat 5 ./myscript.sh
ඔබට ක්රොන්ටාබ් භාවිතා කළ හැකිය. විධානය ක්රියාත්මක crontab -e
කර ඔබ කැමති පෙළ සංස්කාරකය සමඟ එය විවෘත කරන්න, ඉන්පසු මෙම පේළිය එක් කරන්න
*/10 * * * * /path-to-your-command
මෙය සෑම විනාඩි 10 කට වරක් ඔබේ විධානය ක්රියාත්මක කරයි
* */4 * * * /path-to-your-command
මෙය සෑම පැය 4 කට වරක් ඔබේ විධානය ක්රියාත්මක කරයි
$ ..some command...; for i in $(seq X); do $cmd; sleep Y; done
පුනරාවර්තනය කිරීමට X වාර ගණන.
Y නැවත බලා සිටීමට කාලය.
උදාහරණයක් :
$ echo; for i in $(seq 5); do $cmd "This is echo number: $i"; sleep 1;done
ඉහත යෝජනා කර ඇති "ඔරලෝසු" ප්රවේශය පිළිබඳ තවත් කරුණක් නම්, එය ප්රති result ලය පෙන්වන්නේ ක්රියාවලිය සිදු වූ විට පමණි. "දිනය; නින්ද 58; දිනය" මඟින් දින 2 දර්ශනය වන්නේ තත්පර 59 කට පසුව පමණි ... ඔබ විනාඩි 4 ක් ධාවනය වන දෙයක් ආරම්භ කරන්නේ නම්, එය සෙමින් බහුවිධ අන්තර්ගතයන් පෙන්වන, ඔබට එය සැබවින්ම නොපෙනේ.
අනෙක් අතට, “අතර” ප්රවේශය කෙරෙහි ඇති සැලකිල්ල නම්, එය කාර්ය කාලය සැලකිල්ලට නොගැනීමයි.
while true; do script_that_take_between_10s_to_50s.sh; sleep 50; done
මේ සමඟ, ස්ක්රිප්ට් සෑම මිනිත්තුවකම ක්රියාත්මක වේ, සමහර විට 1m40 ක් ගතවනු ඇත. එබැවින් සෑම මිනිත්තුවකටම ක්රෝන් එකකට එය ධාවනය කළ හැකි වුවද, මෙහි එය සිදු නොවේ.
එබැවින් කවචයේ ප්රතිදානය ජනනය වී ඇති ආකාරය දැක බලා නිශ්චිත ඉල්ලීම් කාලය එනතෙක් බලා සිටීමට නම්, ඔබට පෙර සහ පසු වේලාව දෙස බැලිය යුතු අතර වේලාව සමඟ ලූපය.
වැනි දෙයක්:
while ( true ); do
echo Date starting `date`
before=`date +%s`
sleep `echo $(( ( RANDOM % 30 ) + 1 ))`
echo Before waiting `date`
after=`date +%s`
DELAY=`echo "60-($after-$before)" | bc`
sleep $DELAY
echo Done waiting `date`
done
මෙය මෙය ප්රතිදානය කරයි:
ඔබට පෙනෙන පරිදි, විධානය සෑම මිනිත්තුවකම ක්රියාත්මක වේ:
Date starting Mon Dec 14 15:49:34 EST 2015
Before waiting Mon Dec 14 15:49:52 EST 2015
Done waiting Mon Dec 14 15:50:34 EST 2015
Date starting Mon Dec 14 15:50:34 EST 2015
Before waiting Mon Dec 14 15:50:39 EST 2015
Done waiting Mon Dec 14 15:51:34 EST 2015
එබැවින් "නින්ද echo $(( ( RANDOM % 30 ) + 1 ))
" විධානය ඔබට අවශ්ය ඕනෑම දෙයක් සමඟ ප්රතිස්ථාපනය කරන්න . එය සෑම මිනිත්තුවකම ටර්මිනලය / කවචය මත ක්රියාත්මක වේ. ඔබට වෙනත් කාලසටහනක් අවශ්ය නම්, තත්පර 60 ක් ඔබට අවශ්ය දේ සමඟ වෙනස් කරන්න.
දෝශ නිරාකරණ රේඛා නොමැතිව කෙටි අනුවාදය:
while ( true ); do
before=`date +%s`
sleep `echo $(( ( RANDOM % 30 ) + 1 ))` # Place you command here
after=`date +%s`
DELAY=`echo "60-($after-$before)" | bc`
sleep $DELAY
done
watch -n 1 'echo $COLUMNS'
සහ අතර වෙනස උත්සාහ කරන්නwatch -n 1 echo $COLUMNS
- කලින් සෑම තත්පරයකම පුළුල් වේ, නමුත් දෙවැන්න පුළුල් වන්නේ ආරම්භ වීමට පෙර එක් වරක් පමණිwatch
.