ExecStart ഒരു shell അല്ല: VPN സഹായ യൂണിറ്റ് ശരിയാക്കൽ
ExecStart ഒരു പ്രോഗ്രാമിനെ ആർഗ്യുമെന്റുകളോടെ പ്രവർത്തിപ്പിക്കുന്നു, shell പൈപ്പ്ലൈൻ അല്ല. വ്യക്തമായ ഇന്റർപ്രിറ്റർ അല്ലെങ്കിൽ യഥാർത്ഥ സ്ക്രിപ്റ്റ് ഉപയോഗിക്കുക, തുടർന്ന് യൂണിറ്റ് പരിശോധിച്ച് ജേണൽ വായിക്കുക.
പ്രവർത്തിക്കുന്ന ഒരു കമാൻഡ് ലൈൻ ExecStart-ലേക്ക് പകർത്തി റീലോഡ് ചെയ്യുമ്പോൾ, ആർഗ്യുമെന്റുകളെ ഫയൽനാമങ്ങളായി കണക്കാക്കി യൂണിറ്റ് പരാജയപ്പെടുന്നു അല്ലെങ്കിൽ നിശബ്ദമായി പുറത്തുപോകുന്നു. systemd-ൽ ഒന്നും തകർന്നിട്ടില്ല. ExecStart ആർഗ്യുമെന്റുകളുടെ പട്ടികയാണ്, shell അല്ല, അതിനാൽ പൈപ്പുകൾ, റീഡയറക്ഷൻ, വ്യവസ്ഥകൾ എന്നിവ നിങ്ങളുടെ ടെർമിനൽ വിടുന്ന നിമിഷം അർത്ഥം നഷ്ടപ്പെടുത്തുന്നു. shell എവിടെയായിരിക്കണം എന്ന് തീരുമാനിച്ച്, എന്താണ് പ്രവർത്തിപ്പിക്കേണ്ടതെന്ന് കൃത്യമായി പറയുന്ന യൂണിറ്റ് എഴുതുക.
ExecStart-ലെ പൈപ്പ്ലൈൻ എന്തുകൊണ്ട് ഒന്നും ചെയ്യുന്നില്ല
ടെർമിനലിൽ ഒരു കമാൻഡ് ടൈപ്പ് ചെയ്യുമ്പോൾ shell അതിനെ ആദ്യം വിശകലനം ചെയ്യുന്നു. അത് പൈപ്പ്ലൈൻ നിർമ്മിക്കുന്നു, റീഡയറക്ഷനായി ഫയലുകൾ തുറക്കുന്നു, ഏതെങ്കിലും പ്രോഗ്രാം ആരംഭിക്കുന്നതിന് മുമ്പ് വേരിയബിളുകൾ വികസിപ്പിക്കുന്നു. systemd ഇവയൊന്നും ചെയ്യുന്നില്ല: അത് സ്വന്തം നിയമങ്ങൾ പ്രകാരം ExecStart വിഭജിച്ച് ലഭിച്ച പ്രോഗ്രാമിനെ ആ ആർഗ്യുമെന്റുകളോടെ പ്രവർത്തിപ്പിക്കുന്നു. അതിനാൽ > അക്ഷരാർത്ഥത്തിലുള്ള ആർഗ്യുമെന്റായി എത്തുന്നു, | രണ്ട് പ്രോസസുകളെ ബന്ധിപ്പിക്കുന്നതിന് പകരം പ്രോഗ്രാമിന് നൽകപ്പെടുന്നു. യൂണിറ്റ് തെറ്റായി പെരുമാറുന്നില്ല; വാക്യഘടന മറ്റൊന്നാണ് അർത്ഥമാക്കിയത്.
ഇത് അശ്രദ്ധയല്ല, ബോധപൂർവമാണ്, കാരണം ആർഗ്യുമെന്റുകളുടെ പ്രവചനാതീതമായ കൈകാര്യം ചെയ്യലാണ് യൂണിറ്റുകളെ ഓഡിറ്റ് ചെയ്യാവുന്നതാക്കുന്നത്. shell ഉണ്ടെന്ന് കരുതുന്നവരെ മാത്രമാണ് ഇത് അമ്പരപ്പിക്കുന്നത്.
എന്താണ് പ്രവർത്തിക്കുന്നതെന്ന് കൃത്യമായി പറയുന്ന യൂണിറ്റ് എഴുതുക
ജേണലിൽ ലക്ഷ്യം കാണാവുന്ന ഒരു ചെറിയ യൂണിറ്റിൽ തുടങ്ങുക, അങ്ങനെ വിശകലന പ്രശ്നങ്ങൾ ടണൽ പ്രശ്നങ്ങളിൽ നിന്ന് വേർതിരിഞ്ഞിരിക്കും. ഇത് ഒരു ബൈനറിയുടെ പതിപ്പ് മാത്രം റിപ്പോർട്ട് ചെയ്യുന്നു.
[Unit]
Description=Report the installed OpenVPN version
[Service]
Type=oneshot
ExecStart=/usr/sbin/openvpn --version
StandardOutput=journal
StandardError=journalപാത ഒരു പ്ലേസ്ഹോൾഡറാണ്, അതിനാൽ യഥാർത്ഥത്തിൽ ഇൻസ്റ്റാൾ ചെയ്ത ബൈനറി ഇടുക. Type=oneshot അവസാനം വരെ പ്രവർത്തിക്കുന്ന കമാൻഡിന് അനുയോജ്യമാണ്, ജേണൽ ക്രമീകരണങ്ങൾ അതിന്റെ ഔട്ട്പുട്ട് ടെർമിനൽ ഇല്ലാതെ വായിക്കാവുന്ന ഇടത്ത് രേഖപ്പെടുത്തുന്നു. ബോധപൂർവം ഇൻസ്റ്റാൾ വിഭാഗമില്ല, അതിനാൽ യൂണിറ്റ് ബൂട്ടിൽ പ്രവർത്തനക്ഷമമാക്കുന്നതിന് പകരം കൈകൊണ്ട് വിളിക്കുന്നു. ആരംഭിക്കുന്നതിന് മുമ്പ് ഫയൽ പരിശോധിക്കുക, കാരണം ഡയറക്ടീവിന്റെ പേരിലെ തെറ്റ് പാതയിലെ തെറ്റിൽ നിന്ന് വ്യത്യസ്തമായി പരാജയപ്പെടുന്നു.
systemd-analyze verify /etc/systemd/system/openvpn-version.service
systemctl start openvpn-version.serviceshell ലോജിക് ഒരു സ്ക്രിപ്റ്റിൽ സൂക്ഷിക്കുക
സഹായിക്ക് യഥാർത്ഥത്തിൽ വ്യവസ്ഥാപരമായ ലോജിക് ആവശ്യമുണ്ടെങ്കിൽ, ആ ലോജിക് ഒരു സ്ക്രിപ്റ്റിൽ ഇട്ട് അതിനെ വ്യക്തമായി വിളിക്കുക. സ്ക്രിപ്റ്റിന് ഇന്റർപ്രിറ്റർ വരി, പ്രവർത്തിപ്പിക്കാനുള്ള അനുമതി, സേവനത്തിന് റിപ്പോർട്ട് ചെയ്യാവുന്ന എക്സിറ്റ് കോഡുകൾ എന്നിവ വേണം. /bin/sh -c ഉദ്ധരിച്ച കമാൻഡിനൊപ്പം പ്രവർത്തിപ്പിക്കുന്നത് ജോലി ചെയ്യുന്നു, പക്ഷേ അത് ഉദ്ധരണ നിയമങ്ങൾ യൂണിറ്റിനുള്ളിൽ ഒളിപ്പിക്കുകയും അവലോകനം ബുദ്ധിമുട്ടാക്കുകയും ചെയ്യുന്നു. പേരുള്ള സ്ക്രിപ്റ്റ് കൈകൊണ്ട് പരീക്ഷിച്ച് പിന്നീട് യൂണിറ്റ് തിരുത്താതെ മാറ്റാനാകും. ഇന്ററാക്ടീവ് ഉപയോക്താവിന്റെ shell പ്രൊഫൈലിനെ ആശ്രയിക്കരുത്, കാരണം സേവനം സ്വന്തം പരിസരത്തോടെയാണ് ആരംഭിക്കുന്നത്.
ആപേക്ഷിക പാതകൾ പ്രധാനമാകുമ്പോൾ WorkingDirectory സെറ്റ് ചെയ്യുക, പരിസരം ടെർമിനലിൽ എക്സ്പോർട്ട് ചെയ്യുന്നതിന് പകരം യൂണിറ്റിന്റെ പിന്തുണയ്ക്കുന്ന ഡയറക്ടീവുകളിലൂടെ കൈമാറുക. രഹസ്യങ്ങൾ സംരക്ഷിത ഫയലുകളിലോ ക്രെഡൻഷ്യലുകളിലോ ആണ്, ജേണൽ രേഖപ്പെടുത്തിയേക്കാവുന്ന ആർഗ്യുമെന്റ് പട്ടികകളിലല്ല.
യഥാർത്ഥത്തിൽ നിലവിലുള്ള യൂണിറ്റ് പരിശോധിക്കുക
drop-in ഫയലുകൾ നിങ്ങൾ തിരുത്തിയതായി ഓർക്കുന്ന ഫയലിനെ തൊടാതെ പെരുമാറ്റം മാറ്റുന്നു. മാനേജർ എന്താണ് ലോഡ് ചെയ്തതെന്നും അവസാന റൺ എന്താണ് റിപ്പോർട്ട് ചെയ്തതെന്നും വായിക്കുക.
systemctl cat vpn-helper.service
journalctl -u vpn-helper.service -n 20 --no-pagerയൂണിറ്റ് ഡംപ് ലോഡ് ക്രമത്തിൽ drop-in ഫയലുകൾ ഉൾക്കൊള്ളുന്നു, അപ്രതീക്ഷിതമായ ExecStart സാധാരണയായി അവിടെ നിന്നാണ് വരുന്നത്. ഏതെങ്കിലും മാറ്റത്തിന് ശേഷം മാനേജർ റീലോഡ് ചെയ്ത് പുതിയ നിർവചനം systemctl cat പ്രിന്റ് ചെയ്യുന്നതാണെന്ന് ഉറപ്പാക്കുക. ജേണൽ കൃത്യമായ കമാൻഡ് ലൈനും എക്സിറ്റ് നിലയും കാണിക്കുന്നു, ഇത് ആർഗ്യുമെന്റ് പ്രശ്നത്തെ കാണാതായ ബൈനറിയിൽ നിന്നോ അനുമതി പിശകിൽ നിന്നോ വേർതിരിക്കുന്നു. തുടർന്ന് സഹായി നിലവിലുള്ള VPN ജീവിതചക്രത്തിന്റെ ഭാഗമാണോ അതല്ലെങ്കിൽ കൈകൊണ്ടുള്ള ഡയഗ്നോസ്റ്റിക്സായി തുടരണമോ എന്ന് തീരുമാനിക്കുക, കാരണം രണ്ടാമത്തെ പിന്നണി ടണൽ പ്രോസസ് ഒരു മത്സരിക്കുന്ന ഉടമയെ സൃഷ്ടിക്കുന്നു.
ആവശ്യപ്പെടുമ്പോൾ ശരിയായ ഔട്ട്പുട്ട് പ്രിന്റ് ചെയ്യുന്ന യൂണിറ്റ് നല്ല ആദ്യ നാഴികക്കല്ലാണ്. അത് ഇപ്പോഴും ടണൽ അല്ല, ടണൽ എന്ന് നടിക്കരുത്.