Systemctl සහ සේවා විධාන අතර වෙනස


174

systemdsystemctlආරම්භක වේලාවේදී සේවාවන් ආරම්භ කිරීමට බොහෝ විට භාවිතා කරන විධාන කට්ටලය අපට ලබා දෙයි . අපට උපකාරයෙන් සේවාවන් ආරම්භ කිරීම, නැවැත්වීම, නැවත පූරණය කිරීම, නැවත ආරම්භ කිරීම සහ සේවා තත්ත්වය පරීක්ෂා කිරීම කළ systemctlහැකිය.

අපි උදාහරණයක් ලෙස, කරන්න පුළුවන්, sudo systemctl enable service_nameසහ service_nameස්වයංක්රීයව අවස්ථාවේ දී ආරම්භ වේ. ආරම්භක වේලාවේදී ආරම්භ නොකිරීමට අපට සේවාවන් අක්‍රීය කළ හැකිය.

ක්‍රියාත්මක වන වේලාවේදී සේවා ආරම්භ කිරීම සක්‍රීය කිරීම සඳහා භාවිතා කළ හැකි serviceසහ systemctlවිධාන අතර ඇති එකම වෙනස systemctlකුමක්ද? අපට systemctlඕනෑම සේවාවක් භාවිතා කළ හැකිද ? වෙනත් වැදගත් වෙනස්කම් මොනවාද?


මම හිතන්නේ ඔයා වැරදි පිළිතුරක් ගත්තා, මමම.
ඉවාන් කැරොල්

Answers:


175

මෙම serviceවිධානය ආරම්භ පද්ධති පාලකයින්, නැවතුම්, සහ භාවිතා සැබෑ init පද්ධතිය ගැන අනවශ්ය තොරව සේවා තත්ත්වය පරීක්ෂා ඉඩ සලසා දෙන දවටනය තිර රචනය. Systemd හඳුන්වාදුන් කිරීමට පෙර, ඒ සඳහා දවටනය විය /etc/init.dක්රමලේඛ හා මත් වර්ජකයන්ගේ ගේ initctlවිධානය, එය දැන් මේ දෙක සඳහා දවටනය වේ හා systemctl මෙන්ම.

මූලාශ්රය භාවිතා කරන්න, ලූක්!

එය Upstart සඳහා පරික්ෂා කරයි:

# Operate against system upstart, not session
unset UPSTART_SESSION
if [ -r "/etc/init/${SERVICE}.conf" ] && which initctl >/dev/null \
   && initctl version 2>/dev/null | grep -q upstart \
   && initctl status ${SERVICE} 2>/dev/null 1>/dev/null
then
   # Upstart configuration exists for this job and we're running on upstart

එය ක්‍රියා නොකරන්නේ නම්, එය systemd සඳහා සොයයි:

if [ -d /run/systemd/system ]; then
   is_systemd=1
fi

...

# When this machine is running systemd, standard service calls are turned into
# systemctl calls.
if [ -n "$is_systemd" ]
then

එය ද අසමත් වුවහොත්, එය නැවත පද්ධති V /etc/init.dස්ක්‍රිප්ට් වෙත වැටේ :

run_via_sysvinit() {
   # Otherwise, use the traditional sysvinit
   if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
      exec env -i LANG="$LANG" LANGUAGE="$LANGUAGE" LC_CTYPE="$LC_CTYPE" LC_NUMERIC="$LC_NUMERIC" LC_TIME="$LC_TIME" LC_COLLATE="$LC_COLLATE" LC_MONETARY="$LC_MONETARY" LC_MESSAGES="$LC_MESSAGES" LC_PAPER="$LC_PAPER" LC_NAME="$LC_NAME" LC_ADDRESS="$LC_ADDRESS" LC_TELEPHONE="$LC_TELEPHONE" LC_MEASUREMENT="$LC_MEASUREMENT" LC_IDENTIFICATION="$LC_IDENTIFICATION" LC_ALL="$LC_ALL" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" ${ACTION} ${OPTIONS}
   else
      echo "${SERVICE}: unrecognized service" >&2
      exit 1
   fi
}

...
run_via_sysvinit

සිට serviceවිධානය තරමක් සරල දවටනය වන අතර, එය පමණක් සත්ය init පද්ධතියක් ලබා කුමක්ද කියා සාපේක්ෂව ක්රියාවන් සීමිත HTML සඳහා සහය දක්වයි.

උබුන්ටු හි විවිධ සංස්කරණවල අතේ ගෙන යා හැකි serviceබව සඳහා, සේවාවක් ආරම්භ කිරීමට, නැවැත්වීමට, නැවත ආරම්භ කිරීමට හෝ පරීක්ෂා කිරීමට පරිශීලකයින්ට විශ්වාසදායක ලෙස විධානය භාවිතා කළ හැකිය . කෙසේ වෙතත්, වඩාත් සංකීර්ණ කාර්යයන් සඳහා, සත්‍ය විධානය භාවිතා කරනු ලැබේ, initctlඑසේත් systemctlනැතිනම් /etc/init.dස්ක්‍රිප්ට් කෙලින්ම භාවිතා කිරීමට සිදුවිය හැකිය.

තව දුරටත්, එතුමෙකු වීම, serviceසමහර අවස්ථාවල ස්ක්‍රිප්ට් එක සෘජු සමාන විධානයකට වඩා වැඩි යමක් කරයි. උදාහරණයක් වශයෙන්:

  • එය සෑම විටම /etc/init.dපිරිසිදු පරිසරයක ස්ක්‍රිප්ට් ක්‍රියාත්මක කරයි . ( ඉහත ශ්‍රිතයේ දිගු env විධාන ආයාචනය සටහන් කරන්න run_via_sysvinit.)
  • සේවාව දැනටමත් ක්‍රියාත්මක නොවන්නේ නම් තැනිතලා දෝෂයක් ඇති බැවින් එය restartUpstart පද්ධති වල stop/ සංයෝජනයකට සිතියම් ගත කරයි .startinitctl restart
  • සම්බන්ධිත සොකට් ඇති systemd සේවාවන් නැවැත්වීමේදී එය සොකට් නතර කරයි:

    case "${ACTION}" in
      restart|status)
         exec systemctl $sctl_args ${ACTION} ${UNIT}
      ;;
      start|stop)
         # Follow the principle of least surprise for SysV people:
         # When running "service foo stop" and foo happens to be a service that
         # has one or more .socket files, we also stop the .socket units.
         # Users who need more control will use systemctl directly.

සේවා වින්‍යාස ගොනුවේ (හෝ අභිබවා යාමෙන් අක්‍රීය කර ඇත) සෘජුවම ඉහළට සේවා සක්‍රිය කර ඇති අතර, පද්ධති V ස්ක්‍රිප්ට් update-rc.dවිධානය සමඟ සක්‍රීය කර හෝ අක්‍රීය කර ඇත (එය /etc/rc*නාමාවලිවල සමමුහුර්ත කළමනාකරණය කළ ), එබැවින් serviceආරම්භයේදී සේවාවන් සක්‍රීය කිරීමට හෝ අක්‍රීය කිරීමට විධානය කිසි විටෙකත් සම්බන්ධ නොවීය. .


38
  • systemd SysV සමඟ පසුපසට අනුකූල වේ.
  • ආරම්භයේදී සේවා සමාන්තරව පටවනු ලැබේ
  • එය සේවාවක් ඉල්ලුමට සක්‍රිය කිරීම සපයයි
  • එය යැපීම මත පදනම් වේ
  • මම අනුමාන කරන තවත් බොහෝ දේ ...

ඔබ සඳහන් කළ දෙයට වඩා බොහෝ දේ කළ systemctlහැකිය.

systemd ඒකක සමඟ ක්‍රියා කරයි, විවිධ වර්ගයේ ඒකක ඇත: ඉලක්ක, සේවා, සොකට්, ආදිය. ඉලක්ක ධාවන පථයට සමාන සංකල්පයකි, ඒවා එකට ඒකක සමූහයකි.

systemctlසුපුරුදු පද්ධති ඉලක්කය සැකසීමට හෝ ලබා ගැනීමට ඔබට භාවිතා කළ හැකිය .

systemctl get-default

ඔබට වෙනත් ඉලක්ක කරා යා හැකිය:

systemctl isolate multiuser.target

වෙනත් ඉලක්ක වන්නේ: බහුකාර්ය, චිත්‍රක, නැවත ලබා ගැනීම, හදිසි, නැවත පණගැන්වීම, බල සැපයුම.

ඔබ පැවසූ පරිදි, ඔබට systemctlසේවාවන් කළමනාකරණය කිරීමට භාවිතා කළ හැකිය, මා දන්නා සේවා කළමනාකරණයට අදාළ වෙනත් විධානයන්:

# Restarts a service only if it is running.
systemctl try-restart name.service

# Reloads configuration if it's possible.
systemctl reload name.service

# try to reload but if it's not possible restarts the service
systemctl reload-or-restart name.service

සේවා තත්වයක් ගැන දැන ගැනීමට ඔබට එය භාවිතා කළ හැකිය:

systemctl status name.service

systemctl is-active name.service # running
systemctl is-enabled name.service # will be activated when booting
systemctl is-failed name.service # failed to load

ඔබට සේවාවක් ආවරණය කිරීමට හෝ ඉවත් කිරීමට හැකිය:

systemctl mask name.service
systemctl unmask name.service

ඔබ එය සම්බන්ධ කරන සේවාවක් වෙස්මුහුණු කළ විට /dev/null, අතින් හෝ ස්වයංක්‍රීයව වෙනත් සේවාවන්ට එය සක්‍රිය / සක්‍රීය කළ නොහැක. (ඔබ මුලින්ම එය ඉවත් කළ යුතුය).

Systemctl හි තවත් භාවිතයක් වන්නේ ඒකක ලැයිස්තුගත කිරීමයි:

systemctl list-units

පටවන ලද සහ ක්‍රියාකාරී සියලු වර්ගවල ඒකක.

සේවා ඒකක ලැයිස්තුගත කරන්න:

systemctl list-units --type=service

හෝ පටවා ඇති සහ සක්‍රිය කර ඇති සියලුම ඒකක ලැයිස්තුගත කිරීම සඳහා:

systemctl list-unit-files

ඔබට අන්වර්ථයන් සෑදිය හැකිය හෝ දුරස්ථ යන්ත්‍ර පාලනය කළ හැකිය

systemctl --host ravexina@192.168.56.4 list-units

අනෙක් අතට serviceඑය කළ යුතු දේ කරයි, සේවාවන් කළමනාකරණය කිරීම සහ වෙනත් මහජන ව්‍යාපාර සමඟ කිසිදු සම්බන්ධයක් නැත;)


2
එය කදිම පිළිතුරකි, කළ serviceහැකි නමුත් කළ නොහැකි කිසිවක් systemctlතිබේද?
luv.preet

මම ඒ ගැන දන්නා කිසිවක් නැත, මම සිතන්නේ සර්විස් මෑන් පිටුව බැලීම ප්‍රයෝජනවත් වනු ඇත.
රවෙක්සිනා

1
පැහැදිලි වෙනස්කම් කිහිපයක් තිබේ. සින්ටැක්ස් එකකි. තවත් දෙයක් නම්, මා දන්නා පරිදි systemv ස්ක්‍රිප්ට් කිසි විටෙකත් සොකට් සමඟ ගනුදෙනු නොකළ බවය. Systemd ජාල වර්ගයේ දේවල් සමඟ කටයුතු කිරීමට උත්සාහ කිරීම තවත් දෙයක් වන අතර එය නිතර විවේචනයට ලක්වන කරුණකි. සියල්ලටම වඩා, systemd උත්සාහ කරන්නේ හුදෙක් සේවාවන් ආරම්භ කිරීමට වඩා වැඩි යමක් කිරීමටයි
Sergiy Kolodyazhnyy

1
අසාර්ථක service startඋත්සාහයන්ගෙන් systemd සැඟවුණු ලොග් පණිවිඩ ගැන මෙහි පැමිණිල්ලක් කිරීමට මම කැමතියි . පෙර-පද්ධති, service startමගේ සේවාව ආරම්භ නොවන්නේ මන්දැයි මට එකවරම බැලීමට ඉඩ දෙනු ඇත. Post-systemd, මට එය සොයා ගැනීමට පෙර විවිධ ල logs ු-සටහන් හතරක් හෝ පහක් බැලීමට සිදුවේ. කියූ සියල්ලම, මගේ අදහස නිසැකවම මාතෘකාවෙන් බැහැර වන අතර බොහෝ විට මකා දැමෙනු ඇත.
රොස් ප්‍රෙස්සර්

13
AFAICS මෙම පිළිතුර serviceවිධානය ගැන කිසිවක් පවසන බවක් නොපෙනේ , එය ප්‍රශ්නයේ කොටසක් නොවේද?
ilkkachu
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.