අභිරුචි යෙදුමක් සඳහා මම සරල systemd සේවා ගොනුවක් නිර්මාණය කර ඇත්තෙමි. මම එය අතින් ක්රියාත්මක කරන විට යෙදුම හොඳින් ක්රියාත්මක වේ, නමුත් මම එය systemd සමඟ ක්රියාත්මක කරන විට මගේ CPU උපරිම වේ.
මම උත්සාහ කරන්නේ මගේ ගැටලුව තිබෙන තැන සොයා ගැනීමටයි, නමුත් ප්රතිදානය කොහෙන්දැයි මම නොදනිමි (නැතහොත් ප්රතිදානය කොතැනක හෝ තැබීමට systemd වින්යාස කරන්නේ කෙසේද).
මෙන්න මගේ සේවා ගොනුව:
[Unit]
Description=Syncs files with a server when they change
Wants=network.target
After=network.target
[Service]
ExecStart=/usr/local/bin/filesync-client --port 2500
WorkingDirectory=/usr/local/lib/node_modules/filesync-client
Restart=always
[Install]
WantedBy=multi-user.target
යෙදුම පුරාම, මම stdout සහ stderr වෙත ප්රතිදානය කරමි.
මගේ ඩීමනයේ ප්රතිදානය කියවන්නේ කෙසේද?
සංස්කරණය කරන්න:
මම සොයා ගත්තා man systemd.exec
, එහි StandardOutput=
විකල්පය සඳහන් කර ඇත , නමුත් එය භාවිතා කරන්නේ කෙසේදැයි මට විශ්වාස නැත. සිට man පිටුව :
StandardOutput=
ක්රියාත්මක කරන ලද ක්රියාවලි වල ගොනු විස්තර 1 (STDOUT) සම්බන්ධ කර ඇති පාලක. එක් ගනී උරුම , ශූන්ය , tty වෙත , syslog , kmsg , kmsg + කොන්සෝලය , syslog + කොන්සෝලය හෝ සොකට් .
සම්මත ආදානයේ ගොනු විස්තරය උරුම කර ගැනීමට සකසා ඇත්නම් සම්මත ප්රතිදානය සඳහා අනුපිටපත් කරනු ලැබේ. සම්මත ප්රතිදානය ශුන්ය ලෙස සකසා ඇත්නම්
/dev/null
, එනම් එයට ලියා ඇති සියල්ල නැති වී යයි. කිරීමට හැකි නම්, tty වෙත සම්මත ප්රතිදානය tty වෙත සම්බන්ධ කිරීමට නියමිතය (මාන ලෙසTTYPath=
, පහත බලන්න). TTY ප්රතිදානය සඳහා භාවිතා කරන්නේ නම්, ක්රියාත්මක කරන ලද ක්රියාවලිය පමණක් පර්යන්තයේ පාලන ක්රියාවලිය බවට පත් නොවන අතර, ටර්මිනලය මුදා හැරීමට වෙනත් ක්රියාදාමයන් අසමත් නොවනු ඇත. syslog සම්මත ප්රතිදානය syslog (3) පද්ධති ලොගර් සමඟ සම්බන්ධ කරයි. kmsg එය dmesg (1) හරහා ප්රවේශ විය හැකි කර්නල් ලොග් බෆරය සමඟ සම්බන්ධ කරයි. syslog + console සහ kmsg + consoleඒ හා සමානව ක්රියා කරන නමුත් ප්රතිදානය පද්ධති කොන්සෝලය වෙත පිටපත් කරන්න. සොකට් සක්රිය කිරීමෙන් සොකට් එකකට සම්මත ප්රතිදානය සම්බන්ධ කරයි, අර්ථ නිරූපණය අදාළ විකල්පයට සමාන වේStandardInput=
. මෙම සැකසුම පෙරනිමියෙන් උරුම වේ.
මෙයින් අදහස් කරන්නේ මේවා මගේ එකම විකල්පයන් බවයි? උදාහරණයක් ලෙස, ප්රතිදානය /dev/shm
හෝ වෙනත් දෙයක් දැමීමට මම කැමතියි . මම සිතන්නේ මට යුනික්ස් ඩොමේන් සොකට් එකක් භාවිතා කර සරල සවන්දෙන්නෙකු ලිවිය හැකි නමුත් මෙය ටිකක් අනවශ්ය බව පෙනේ.
නිදොස් කිරීම සඳහා මට මෙය අවශ්ය වන අතර, බොහෝ විට මම බොහෝ ල logs ු-සටහන් ඉවත් කර ප්රතිදානය සයිස්ලොග් ලෙස වෙනස් කරමි.
/var/log/syslog
, නමුත් /var/log/messages
උපක්රමය කරයි. ගැටළුව වන්නේ, ල logs ු-සටහන් වලට අනුව, මගේ ඩීමන් ආරම්භයේදීම බිඳ වැටෙන නමුත්, එය HTTP සේවාදායකයක් ඇති බැවින් එය තවමත් ක්රියාත්මක වන බව මට පැවසිය හැකිය, මට එය විමසිය හැකිය. පෙනෙන ආකාරයට ඉතිරි ල
StandardOutput=tty
ඔබේ ඩීමන් දියත් කරන විට සිදුවන්නේ කුමක්දැයි බැලීමට සැකසීමට උත්සාහ නොකරන්නේ මන්ද? එය ටර්මිනලය ප්රතිදානය කළ යුතුය ( ttyS0
ඔබේ තිරය මත ප්රතිදානය ලබා ගැනීමට ඔබට භාවිතා කිරීමට හෝ ඒ හා සමාන විය හැකිය).
ExecStart=/usr/local/bin/filesync-client --port 2500 2>/tmp/filesync.log
/var/log/syslog
ප්රතිදානය පරීක්ෂා කිරීමට ඔබ උත්සාහ කර තිබේද? බොහෝ පද්ධති මඟින් දේවල් ලොග් වනු ඇත,/var/log/
එබැවින් මම එහි පරීක්ෂා කිරීමෙන් ආරම්භ කරමි.grep
ප්රතිදානය ඔබ දන්නේ නම් ඔබට පෙළ සෙවීමට භාවිතා කළ හැකිය :grep "my output" /var/log
උපක්රමය කළ යුතුය.