මම ඉවත් වූ පසු ලිනක්ස් ක්‍රියාවලියක් පවත්වාගෙන යාම


143

මම SSH හරහා ලිනක්ස් යන්ත්‍රයකට සම්බන්ධ වන අතර, ගොනු පද්ධති ක්‍රියාකාරිත්වය සිදු කරන බර බාෂ් ස්ක්‍රිප්ට් එකක් ධාවනය කිරීමට මම උත්සාහ කරමි. එය පැය ගණනක් පවත්වා ගෙන යනු ඇතැයි අපේක්ෂා කෙරේ, නමුත් මට ඇති අන්තර්ජාල සම්බන්ධතා ගැටළු නිසා මට SSH සැසිය විවෘතව තැබිය නොහැක.

පසුබිම් ක්‍රියාකරු වන ඇම්පර්සැන්ඩ් ( &) සමඟ ස්ක්‍රිප්ට් ධාවනය කිරීම උපක්‍රමයක් වනු ඇතැයි මම සැක කරමි , මන්ද මම එය උත්සාහ කර පසුව එම ක්‍රියාවලිය සම්පූර්ණ කර නොමැති බව සොයා ගත්තෙමි. ඉවත් වී ක්‍රියාවලිය දිගටම කරගෙන යන්නේ කෙසේද?

Answers:


135

හොඳම ක්‍රමය වන්නේ ටර්මිනල් බහුමාපකය තුළ ක්‍රියාවලිය ආරම්භ කිරීමයි. විකල්පයක් ලෙස ඔබට ක්‍රියාවලියට HUP සං .ාව නොලැබෙන පරිදි කළ හැකිය.


පර්යන්තය multiplexer "සැබෑ" පර්යන්තය (ඇත්තටම අද සියලු පර්යන්ත "අතාත්වික" නමුත් තවත් දින සඳහා තවත් මාතෘකාවක් වන) සිට ස්වාධීන ධාවනය වන "අතාත්වික" පර්යන්ත සපයයි. ඔබේ ssh සැසිය සමඟ ඔබේ සැබෑ පර්යන්තය වසා තිබුණද අථත්‍ය පර්යන්තය දිගටම ක්‍රියාත්මක වේ.

අථත්ය පර්යන්තයෙන් ආරම්භ කරන ලද සියලුම ක්රියාවලි එම අථත්ය පර්යන්තය සමඟ දිගටම ක්රියාත්මක වේ. ඔබ සේවාදායකයට නැවත සම්බන්ධ වන විට ඔබට අථත්‍ය පර්යන්තයට නැවත සම්බන්ධ විය හැකි අතර ගත වූ කාලය හැර අන් කිසිවක් සිදු නොවූවාක් මෙන් වනු ඇත.

ජනප්‍රිය ටර්මිනල් බහුකාර්ය දෙකක් වන්නේ තිරය සහ ටීඑම්එක්ස් ය .

තිරයට දැඩි ඉගෙනුම් වක්‍රයක් ඇත. සංකල්පය පැහැදිලි කරන රූප සටහන් සහිත හොඳ නිබන්ධනයක් මෙන්න: http://www.ibm.com/developerworks/aix/library/au-gnu_screen/


මෙම HUP පර්යන්තය වසා ඇත විට සංඥා (හෝ SIGHUP) පර්යන්තය විසින් එහි සියලු ළමා ක්රියාවලිය වෙත යවනු ලැබේ. SIGHUP ලැබීමෙන් පසු පොදු ක්‍රියාව වන්නේ අවසන් කිරීමයි. මේ අනුව ඔබේ ssh සැසිය විසන්ධි වූ විට ඔබගේ සියලු ක්‍රියාදාමයන් අවසන් වේ. මෙය වළක්වා ගැනීම සඳහා ඔබේ ක්‍රියාදාමයන්ට SIGHUP නොලැබෙන පරිදි කළ හැකිය.

එසේ කිරීමට පහසු ක්‍රම දෙකක් nohupසහ disown.

කෙසේද nohupසහ disownක්‍රියා කරන්නේ කෙසේද යන්න පිළිබඳ වැඩි විස්තර සඳහා මෙම ප්‍රශ්නය සහ පිළිතුර කියවන්න: /unix/3886/difference-between-nohup-disown-and

සටහන: ක්‍රියාවලි දිගටම පැවතුනද ඒවා තවදුරටත් කිසිදු පර්යන්තයකට සම්බන්ධ නොවන බැවින් ඔබට ඒවා සමඟ තවදුරටත් සම්බන්ධ විය නොහැක. මෙම ක්‍රමය ප්‍රධාන වශයෙන් ප්‍රයෝජනවත් වන්නේ දිගුකාලීන කණ්ඩායම් ක්‍රියාදාමයන් සඳහා වන අතර එය ආරම්භ වූ පසු කිසිදු පරිශීලක ආදානයක් අවශ්‍ය නොවේ.


3
අන්තර්ක්‍රියාකාරී හා අන්තර්ක්‍රියාකාරී නොවන අවස්ථා සඳහා විසඳුමක් සපයන බැවින් මම මෙම පිළිතුරට කැමතියි. අන්තර්ක්‍රියාකාරී අවස්ථාවෙහිදී, screenඔබට තවත් බොහෝ විකල්ප ලබා දෙයි, නමුත් ඔබ authorized_keysදුරස්ථව ස්ක්‍රිප්ට් එකක් ධාවනය කිරීමට මිනිසුන්ට ඉඩ දෙන්නේ නම් ssh, nohupවිකල්පය ස්ක්‍රිප්ටය ආරම්භ කිරීමට sshභාවිතා කළ සැසිවාරයට වඩා දිගු කාලයක් පවතින ක්‍රියාවලි ආරම්භ කිරීමට හොඳ සරල ක්‍රමයකි. .
මාර්ක් බූත්

1
@rahmanisback - ඔබට පිළිගත් පිළිතුර ඕනෑම වේලාවක වෙනස් කළ හැකි බව මතක තබා ගන්න. එරිකාගේ පිළිතුර මෙතෙක් ඉහළින්ම ඡන්දය දී ඇති නිසා එය ඔබට හොඳම පිළිතුර යැයි අදහස් නොකෙරේ, ඇත්ත වශයෙන්ම එය ඔබ පිළිගත් පිළිතුර බවට පත් කිරීම හොඳ පිළිතුරක් ලෙස ඡන්දය දීමට වැඩි පිරිසක් උනන්දු කළ හැකිය.
මාර්ක් බූත්

3
* කැස්ස * tmuxisbetter * කැස්ස *
පිස්සු

3
tmux > තිරය. එය උත්සාහ කරන්න, ඔබ කිසි විටෙකත් ආපසු නොයනු ඇත.
h0tw1r3

1
LTheLQ - byobu යනු GNU තිරයයි . ඔබ තවමත් තිරය භාවිතා කරන්නේ ඉතා අභිරුචිකරණය කළ .screenrc සමඟ පමණි.
EEAA

92

මෙය කිරීමට ක්‍රම කිහිපයක් ඇත, නමුත් මට වඩාත්ම ප්‍රයෝජනවත් වන්නේ ග්නූ තිරය භාවිතා කිරීමයි .

ඔබ ඇතුලට ගිය පසු දුවන්න screen. මෙය තිරය තුළ ධාවනය වන තවත් කවචයක් ආරම්භ කරනු ඇත. ඔබේ විධානය ක්‍රියාත්මක කරන්න, ඉන්පසු කරන්න Ctrl- a d.

මෙය තිර සැසියෙන් ඔබව "විසන්ධි කරනු ඇත". මෙම අවස්ථාවේදී, ඔබට ඉවත් වීමට හෝ ඔබ කැමති වෙනත් දෙයක් කළ හැකිය.

ඔබට තිර සැසියට නැවත සම්බන්ධ වීමට අවශ්‍ය වූ විට screen -RD, ෂෙල් විමසුමේ සිට ධාවනය කරන්න (සැසිය නිර්මාණය කළ පරිශීලකයා මෙන්).


6
තිරයේ සම්පූර්ණ විධාන පොකුරක් ඇත, සියල්ලම Ctrl-a සමඟ ආරම්භ වේ. ඔබ එක් අමතර දෙයක් පමණක් ඉගෙන ගන්නේ නම්, "Ctrl-a?" සමඟ ආරම්භ කරන්න. එවිට ඔබට "Ctrl-a c" සහ "Ctrl-a n"
ඉගෙන ගැනීමට අවශ්‍ය නොවනු ඇත

@olafure +1, ස්තූතියි. තිරය ​​මගේ ප්‍රාථමික මෙවලම් පෙට්ටිය වනු ඇති බව පෙනේ.
doc_id

tmux > තිරය. එය උත්සාහ කරන්න, ඔබ කිසි විටෙකත් ආපසු නොයනු ඇත.
h0tw1r3

Tmux සඳහා +1. මම සති 5 කට පෙර තිරය අතහැරියා.
බ්‍රයන් හන්ට්

75

දී bash, disownමූල පදය මේ සඳහා හොඳින් ගැලපේ. පළමුව, ඔබේ ක්‍රියාවලිය පසුබිම තුළ ක්‍රියාත්මක කරන්න (එක්කෝ භාවිතා කරන්න &, නැතහොත් ^Zටයිප් කරන්න bg):

$ wget --quiet http://server/some_big_file.zip &
[1] 1156

ටයිප් කිරීමෙන් jobsඔබට ක්‍රියාවලිය තවමත් කවචයට අයත් බව පෙනේ:

$ jobs
[1]+  Running  wget

මෙම අවස්ථාවේදී ඔබ ඉවත් වුවහොත්, පසුබිම් කාර්යය ද මරණයට පත් වනු ඇත. කෙසේ වෙතත්, ඔබ දුවන්නේ නම් disown, බාෂ් විසින් කාර්යය හඳුනාගෙන එය දිගටම කරගෙන යාමට ඉඩ දෙයි:

$ disown

ඔබට මෙය සනාථ කළ හැකිය:

$ jobs
$ logout

ඔබට &සහ disownඑකම පේළියේ ඒකාබද්ධ කළ හැකිය , වැනි:

$ wget --quiet http://server/some_big_file.zip & disown
$ logout

මෙය nohupමගේ nohup.outගොනු පද්ධතිය පුරා ගොනු කිරීමට ඉඩ නොදෙන නිසා මෙය මගේ මතය අනුව ධාවනය කිරීමට වඩා හොඳය . එසේම, nohupඔබ විධානය ක්‍රියාත්මක කිරීමට පෙර ධාවනය disownකළ යුතුය - ඔබට අවශ්‍ය වන්නේ පසුබිම හා කාර්යය වෙන් කිරීමට අවශ්‍ය බව පසුව තීරණය කළහොත් පමණි.


1
එය ඉතා හොඳ පිළිතුරකි, 1+. Nohup හෝ Screen සඳහා ඇති එකම මනාපය වනුයේ bash හි ස්වාධීනත්වය වන අතර එය වෙනත් කවච සමඟ භාවිතා කළ හැකිය. නමුත් මම බාෂ් භාවිතා කරන සෑම අවස්ථාවකම මම ඔබේ ප්‍රවේශයට ඇලී සිටිමි.
doc_id

ඔව් - මෙය බාෂ්-විශේෂිතයි, මන්ද මම මෙතෙක් භාවිතා කළ එකම කවචය බාෂ් ය. වෙනත් ෂෙල් වෙඩි ඒ හා සමාන දෙයකට සහය දක්වයිදැයි මම කල්පනා කරමි (එනම් නොහප් නොමැතිව පසුබිමක දියත් කිරීම) - වෙනත් ෂෙල් වෙඩි සඳහා වෙනත් පිළිතුරු පළ කිරීමට යමෙකුට හැකි නම් එය අපූරු ය.
ජෙරමි වීසර්

1
ඕනෑම sh-lookalike
එකකින්

1
+1 පසුව තීරණය කිරීමට හැකි නිසා. මේ මොහොතේ මට මේ සඳහා අවශ්‍යතාවයක් තිබුණි. ප්‍රචාරණය කළ පරිදි වැඩ කරන ලදි
code_monk

37

බොහෝ ලිනක්ස් පෙට්ටිවල ඇති nohup මෙවලම මෙය කරයි.


1
මෙය බොහෝ දුරට සරලම පිළිතුරයි. සිට ලැබෙන ඕනෑම ප්‍රතිදානයක් ස්වයංක්‍රීයව nohup.out වෙත යොමු කෙරෙන අතර පසුව පරීක්ෂා කළ හැකිය.
ජූලියන්

3
nohup ට කිසිසේත් zsh අවශ්‍ය නොවේ.
ආරොන් බ්‍රවුන්

nohup යනු නිවැරදි පිළිතුරයි, එය එල්ලීම සඳහා කෙටි වේ.
කිංජාල් ඩික්සිත්

2
nohup බොහෝ යන්ත්‍රවල දක්නට ලැබෙන අතර පසුව තිරය, එබැවින් ඔබ එය භාවිතා කරන්නේ කෙසේදැයි දැන සිටිය යුතුය.
සෙනෝන්

27

සවිස්තරාත්මකව කිවහොත් , තිරය හා සමාන මූලික අදහසක් ඇති tmux මම පෙන්වා දෙමි :

tmux යනු GNU තිරය වැනි වැඩසටහන් සඳහා නවීන, BSD- බලපත්‍රලාභී විකල්පයකි. ප්‍රධාන අංග අතරට:

  • ප්‍රබල, ස්ථාවර, හොඳින් ලේඛනගත කළ හැකි සහ පහසුවෙන් ස්ක්‍රිප්ට් කළ හැකි විධාන අතුරුමුහුණතක්.
  • කවුළුවක් තිරස් අතට හා සිරස් අතට කවුළුවලට බෙදිය හැකිය.
  • පැනල් නිදහසේ ගෙනයාමට හා ප්‍රමාණය වෙනස් කිරීමට හෝ පෙර සැකසූ පිරිසැලසුම් වලට සකස් කළ හැකිය.
  • UTF-8 සහ 256 වර්ණ පර්යන්ත සඳහා සහාය.
  • බහු බෆර සමඟ පිටපත් කර අලවන්න.
  • කවුළු, සැසි හෝ සේවාදායකයින් තෝරා ගැනීමට අන්තර්ක්‍රියාකාරී මෙනු.
  • ඉලක්කයේ පෙළ සෙවීමෙන් වත්මන් කවුළුව වෙනස් කරන්න.
  • අතින් අගුලු දැමීම, අතින් හෝ කල් ඉකුත් වූ පසු.
  • ක්‍රියාකාරී සංවර්ධනය යටතේ පිරිසිදු, පහසුවෙන් විස්තාරණය කළ, BSD- බලපත්‍රලාභී කේත පදනමක්.

කෙසේ වෙතත්, ගූගල් හි සෙවීම ආසන්න වශයෙන් අසීමිත පහසුය.


2
"gnu screen"ඔබගේ සෙවුම් විමසුම ලෙස භාවිතා කිරීම ඉතා හොඳින් ක්‍රියාත්මක වේ.
gnur

4
Tmux සඳහා +1000!
mbq

13

ඔබ ඉවත් වන විට ක්‍රියාවලි දිගටම පවත්වා ගෙන යාම සඳහා තිරය අතිරික්ත වේ.

Dtach උත්සාහ කරන්න :

dtach යනු C හි ලියා ඇති වැඩසටහනක් වන අතර එය තිරයේ වෙන් කිරීමේ අංගය අනුකරණය කරයි, එමඟින් පාලක පර්යන්තයෙන් ආරක්‍ෂිත පරිසරයක වැඩසටහනක් ක්‍රියාත්මක කිරීමට ඉඩ ලබා දේ. උදාහරණයක් ලෙස, කිසියම් හේතුවක් නිසා පර්යන්තය විසන්ධි වීම නිසා dtach පාලනය යටතේ ඇති වැඩසටහනට බලපෑමක් සිදු නොවේ.

තිරය ​​මගේ අවශ්‍යතා සපුරාලීමට ප්‍රමාණවත් නොවන නිසා dtach ලියා ඇත; බහු පර්යන්ත සඳහා සහාය හෝ පර්යන්ත අනුකරණ සහාය වැනි තිරයේ අමතර විශේෂාංග මට අවශ්‍ය නොවීය. තිරය ​​ද විශාල, විශාල, සහ තේරුම් ගැනීමට අපහසු ප්‍රභව කේත ඇත.

වැඩසටහන සහ අමුණා ඇති පර්යන්ත අතර ධාරාව පිළිබඳ අධික ලෙස අර්ථ නිරූපණය කිරීම නිසා තිරය ඊමාක්ස් සහ ඉර්සිඅයි වැනි පූර්ණ-තිර යෙදුම් භාවිතා කිරීමට බාධා කළේය. dtach ට ටර්මිනල් ඉමියුලේෂන් ස්තරයක් නොමැති අතර වැඩසටහනේ අමු ප්‍රතිදාන ප්‍රවාහය අමුණා ඇති පර්යන්ත වෙත යොමු කරයි. Dtach සිදුකරන එකම ආදාන සැකසුම වන්නේ වෙන් කිරීමේ චරිතය පරිලෝකනය කිරීමයි (එමඟින් dtach වැඩසටහනෙන් වෙන්වීමට සං als ා කරයි) සහ අත්හිටුවීමේ යතුර සැකසීම (ක්‍රියාත්මක වන වැඩසටහනට කිසිදු බලපෑමක් නොකර තාවකාලිකව අත්හිටුවීමට dtach ට කියයි), සහ මේ දෙකම කළ හැකිය අවශ්‍ය නම් අක්‍රීය කරන්න.

තිරයට පටහැනිව, dtach හි අවම ලක්ෂණ ඇති අතර එය ඉතා කුඩා වේ. මෙමඟින් dtach දෝෂ සහ ආරක්ෂක සිදුරු සඳහා වඩාත් පහසුවෙන් විගණනය කිරීමට ඉඩ ලබා දෙන අතර ගලවා ගැනීමේ තැටි වැනි ඉඩ සීමිත පරිසරවල එය ප්‍රවේශ කළ හැකිය.


ඔබට ස්තුතියි. මම මෙහි පැමිණියේ dtach ගැන ද පළ කිරීමට ය. පර්යන්තය වෙන් කිරීම සඳහා එය දැන් මගේ ය; තිරය ​​WAY ඕනෑවට වඩා කරන අතර හාස්‍යජනක මට්ටමකට ආදානයට බාධා කරයි. සත්‍ය තිරයට තමන්ගේම ටර්ම් කැප් එකක් අවශ්‍යයි.
සුදුමැලි

9

ඕනෑම ෂෙල් ක්‍රියාවලියක් නිරූපණය කිරීමේ ක්‍රමයක් මෙන්න, බාහිර වැඩසටහන් අවශ්‍ය නොවේ:

( while sleep 5; do date; done ) <&- >output.txt &

ඔබ ඔබේ සැසිය වසා දැමූ විට, output.txt ගොනුව (එය බෆරින් ඇති බැවින් ශුන්‍ය නොවන බව පෙන්වීමට ටික කාලයක් ගතවේ) සාක්ෂි ලෙස කාර්යය දිගටම ක්‍රියාත්මක වේ. පරීක්ෂණයෙන් පසු ඔබේ රැකියාව මරා දැමීමට අමතක නොකරන්න.

එබැවින් ඔබ කළ යුත්තේ කාර්යය සමීපව තබා පසුබිම කිරීමයි. ඇත්තෙන්ම හොඳ වීමට නම්, පළමුව cd /ඔබ කන්දක් අල්ලාගෙන නොසිටින්න.

මෙය සොලාරිස් යටතේ සරල ෂා වල පවා ක්‍රියාත්මක වේ.


සිත්ගන්නා සුළුය. එය සැලකිය යුතු ප්‍රශ්න කිහිපයක් මතු කළේය. මට පේනවා ඔයා STDIN එක කිසිම දෙයක් කරන්නෙ නෑ කියලා, -ක්‍රියාකරු? < /dev/nullසහ අතර ඇති වෙනස &-කුමක්ද? STDIN (සහ වෙනත් STDOUT සහ STDERR) වලට STDIN නම් ගොනුවක් < fileහෝ ප්‍රවාහයක් <& streamපැවරිය හැකි යැයි මම සිතමි. < /dev/nullඉහත උදාහරණයේ එය භාවිතා කිරීම සමාන වේද? -ඉහත ක්‍රියාකරු ශුන්‍යය ප්‍රවාහය ලෙස හඳුන්වන්නේද?
doc_id

ඔබ x <& - කරන විට, එය ගොනු විස්තරය x වසා දමයි. මෙම අවස්ථාවේ දී x නොමැත, එමඟින් bash පෙරනිමිය 1 දක්වා, එනම් සම්මත ආදානය කරයි. ඔබ </ dev / null භාවිතා කරන්නේ නම් ඔබ stdin වසා නොගන්නේ නම්, ඔබ වැඩසටහනට හිස් ගොනුවක් ආදානය ලෙස ලබා දෙයි.
w00t

1
ඇත්තම කිව්වොත් මම දන්නේ නැහැ මේක ඔබ දුවන දේ අවමානයට ලක් කරන්නේ ඇයි කියලා :-) එය වැඩ කළත් අපි එය නිෂ්පාදනයේදී භාවිතා කරනවා. විශේෂ දෙයක් අවශ්‍ය නොවී ෂෙල් එකක ක්‍රියාවලියක් නිරූපණය කළ හැකි යැයි සිතමින් මම එය සොයාගත්තෙමි - එබැවින් මම ස්ටැඩින් වසා දැමීමෙන් ආරම්භ කළ අතර එය ප්‍රමාණවත් විය. මම ෂෙල් ප්‍රභව කිහිපයක් කියවා යා යුතු නමුත් මම සිතන්නේ ඔබ ක්‍රියාවලිය වසා දමා පසුබිම සකස් කළහොත් එය ක්‍රියාවලිය ද හඳුනා ගනී.
w00t

2
මා සිතන්නේ එයට හේතුව නම්, දෙමව්පියන්ගේ ක්‍රියාවලියක් දරුවාගේ දැඩි හැසිරවීම වසා දැමූ විට SIGHUP (කවචය මිය ගිය විට දරුවා ඉවත්වීමට හේතු වන සත්‍ය සං signal ාව) අවුලුවාලීමයි. කෙසේ වෙතත්, කාරණයෙන් පසු වසා දැමීම වෙනුවට stdin ශුන්‍ය ලෙස ආරම්භ වුවහොත් , දෙමව්පියන්ට SIGHUP අවුලුවාලීමට ක්‍රමයක් නොමැත. හොඳයි සොයා ගැනීම, නමුත් - කිසි විටෙකත් ඒ ගැන නොසිතනු ඇත.
ජෙරමි වීසර්

Ere ජෙරමිවිසර් ඇත්තෙන්ම පිළිගත හැකි ශබ්දයක්!
w00t

7

මෙම atවිධානය තත්ත්වය මේ ආකාරයේ සඳහා ප්රයෝජනවත් විය හැකිය. උදාහරණයක් ලෙස, ටයිප් කරන්න:

at now

එවිට ඔබට ක්‍රියාත්මක වන විධානයක් හෝ විධාන මාලාවක් ඇතුළත් කළ හැකිය. යන්ත්‍රය මත විද්‍යුත් තැපෑල නිවැරදිව සකසා ඇත්නම් ප්‍රති results ල ඔබට විද්‍යුත් තැපැල් කළ යුතුය.

ඒ වෙනුවට now, ඔබට විකල්පයක් ලෙස දිනයක් හෝ කාල ප්‍රකාශනයක් වැනි වේලාවක් නියම කළ හැකිය now + 15 minutes. බලන්න man atවැඩි විස්තර සඳහා.


7

byobuඋබුන්ටු මත තිරයට ඉදිරිපස කෙළවරකි. එබීමෙන් Ctrl- ?ඔබට සියලුම යතුරුපුවරු කෙටිමං ලැයිස්තුවක් ලැබේ. එය CPU භාරය, තැටි අවකාශය ආදිය නැරඹීමට ප්‍රයෝජනවත් විය හැකි තත්ව තීරුවක් එක් කරයි. සමස්තයක් ලෙස එය ටර්මිනල් පාදක VNC සම්බන්ධතාවයක් ලෙස මා විස්තර කරන අත්දැකීමක් සපයයි.

nohup ලොග් ගොනුවකට එහි ප්‍රතිදානය යොමු කර පසුබිමේ රැකියාවක් ආරම්භ කිරීමට ඉඩ දෙයි, එය අවශ්‍ය නොවන්නේ නම් සෑම විටම / dev / null වෙත හරවා යැවිය හැකිය.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.