انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید

نویسنده موضوع: نوشتن سرویس برای open rc  (دفعات بازدید: 807 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین ㅤSudoㅤ

  • High Hero Member
  • *
  • ارسال: 2313
  • جنسیت : پسر
  • Just sudo it !
پاسخ : فرستادن به پس زمینه !
« پاسخ #15 : 31 فروردین 1401، 01:17 ب‌ظ »
من خودم حاشیه ساز این انجمنم ، اومدین تو تاپیک من حاشیه بازی ؟ 😂
مبین کجایی بیا ساختن سرویس برای open rc چجوریه ؟
« آخرین ویرایش: 04 اردیبهشت 1401، 10:29 ق‌ظ توسط ㅤsudoㅤ »
Debian Sid + Gnome , Software Freedom 💙️

آفلاین BiG

  • High Hero Member
  • *
  • ارسال: 1639
  • Windows 7 - Windows xp - Windows 11
پاسخ : فرستادن به پس زمینه !
« پاسخ #16 : 31 فروردین 1401، 01:19 ب‌ظ »
۶ میلیون ریال دیگه  ;D
انقدر بدم میاد ازین شیوه تبلیغ، که میان الکی یک رقم بالا میزارن بعد میگن تخفیف گذاشتیم رایگانه!

آخه دوره های دیگه سایت رو ببینید! فکر نکنم با 10 هزار تومن دوره بدن!
نه هب الان دوره هایی که میان مثلا یک زبان برنامه نویسی رو یاد میدن تقریباً توی اکثر وب سایت ها رایگانن.
معمولاً میان دوره هایی که توش دارن به صورت تخصصی چیزی رو یاد میدن یا یک فریمورک رو آموزش میدن رو نقدی می‌کنن.
وگرنه پایتون که پره تو اینترنت.
خداحافظ لینوکس!

آفلاین mamadism

  • Hero Member
  • *
  • ارسال: 710
  • جنسیت : پسر
  • UBUNTU 20.04 USER
    • راه های ارتباطی من
پاسخ : فرستادن به پس زمینه !
« پاسخ #17 : 31 فروردین 1401، 03:56 ب‌ظ »
من خودم حاشیه ساز این انجمنم ، اومدین تو تاپیک من حاشیه بازی ؟ 😂
بهرام که گور می‌گرفتی همه عمر

دیدی که چگونه گور بهرام گرفت
   ;D ;)
تکیه بر تقوا و دانش در طریقت کافریست
راهرو گر صد هنر دارد توکل بایدش

آفلاین Mehr32

  • High Hero Member
  • *
  • ارسال: 3703
  • جنسیت : پسر
پاسخ : فرستادن به پس زمینه !
« پاسخ #18 : 31 فروردین 1401، 07:30 ب‌ظ »
دومی خیلی کامل تره (فرصت رو از دست ندید، دوره 6 میلیونه!)
بعد از ۲۳ ساعت و سه ربع، تازه می‌رسه به تعریف تابع؟ 😱
اصلا پیشنهاد نمیکنمش دوره ای که اینطوری باشه
دوره ای که من میدیدم جلسه حدودا سی ام رسید به توابع من هم بعد جلسه چهل دلم تنگ شد زده شدم دیگه ادامه ندادم دوره باید جمع و جور باشه و جزئیات زبان باید وقت استفاده یاد گرفته بشه
پیامبر اکرم :«هرکس از ما کمکی بخواهد ما به او کمک میکنیم,ولی اگر کسی دست نیاز پیش دیگران دراز نکند, خداوند او را بی نیاز خواهد ساخت»

آفلاین ㅤSudoㅤ

  • High Hero Member
  • *
  • ارسال: 2313
  • جنسیت : پسر
  • Just sudo it !
پاسخ : نوشتن سرویس برای open rc
« پاسخ #19 : 04 اردیبهشت 1401، 10:31 ق‌ظ »
بزرگواران ، نوشتن سرویس برای open rc چجوریه ؟ از مقالات اینترنتی سر در نمیارم زیاد !
Debian Sid + Gnome , Software Freedom 💙️

آفلاین EnriqueTTE

  • Sr. Member
  • *
  • ارسال: 466
  • جنسیت : پسر
پاسخ : نوشتن سرویس برای open rc
« پاسخ #20 : 04 اردیبهشت 1401، 02:11 ب‌ظ »
بزرگواران ، نوشتن سرویس برای open rc چجوریه ؟ از مقالات اینترنتی سر در نمیارم زیاد !
زمانی که آرتیکس داشتم یه سرویس برای کنترل نور پس زمینه نوشتم که اسکریپت بش رو جناب دراگون زحمت کشیدن.
الان دیگه OpenRC ندارم اما میدونم یه سرویس ساده کمتر از ۱۰ خط کد میخواد. این لینک میتونه کمک کنه.
این لینک هم مال خود OpenRC هستش.

#!/sbin/openrc-run
 
name=$RC_SVCNAME
command="/usr/bin/my_daemon"
pidfile="/run/$RC_SVCNAME/$RC_SVCNAME.pid"
command_background="yes"
تا جایی که یادم میاد برای من فقط همینا لازم بود. قسمت pidfile باید دایرکتوری و فایل رو خودتون دستی ایجاد کنید وگرنه ارور میده و حتما باید با root ساخته بشه.

اگر قراره کاری که میخواید انجام بدید در پس زمینه درحال اجرا باشه،‌ خط آخر لازمه. مثلا بخشی از کاری که میخواستم انجام بدم لازم بود درحال اجرا باقی بمونه،‌ هر ۱۰ ثانیه میزان روشنایی صفحه رو بخونه و توی یه فایل بریزه.

اگر کار خاصی نمیخواید انجام بدید نیازی به تعریف کردن توابع start, stop و restart نیست.
I am Enriquette

آنلاین mobin1387

  • Sr. Member
  • *
  • ارسال: 465
  • جنسیت : پسر
  • به زودی اینجا چیزی نوشته خواهد شد!
پاسخ : نوشتن سرویس برای open rc
« پاسخ #21 : 05 اردیبهشت 1401، 02:48 ق‌ظ »
سلام. یک مدت نبودم

برای چی به اسکریپت نیاز دارید؟ راه‌اندازی خدمت یا دیمن، شایدم یک کار ساده؟
اینجا مشخص میشه چرا اصرار داشتم OpenRC نصب کنید، یکی از خوبی های OpenRC اسکریپت های نسبتا ساده هست.

من خودم این اسکریپت رو برای راه اندازی nginx نوشتم:
#!/sbin/openrc-run

name=$RC_SVCNAME
description="A high performance web server and a reverse proxy server"
supervise="supervise-daemon"
command="/usr/sbin/nginx"
command_args="-g 'daemon on; master_process on;'"
pidfile="/run/nginx.pid"
extra_started_commands="reload"

depend() {
after net
use dns logger netmount
}

#stop() {
# ebegin "Stopping $RC_SVCNAME"
# /sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
# eend $?
#}

reload() {
ebegin "Reloading $RC_SVCNAME"
/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
eend $?
}
یا مثلا از این برای راه اندازی amavis-new استفاده می‌کنم:
#!/sbin/openrc-run

name=$RC_SVCNAME
description="Interface between MTA and virus scanner/content filters"
supervisor="supervise-daemon"
command="/usr/sbin/amavisd-new"
command_args="foreground"
command_user="amavis:amavis"
extra_started_commands="reload"
pid_file="/var/run/amavis/amavisd.pid"

depend() {
after net
}

start_pre() {
ebegin "Preloading $RC_SVCNAME"
/usr/bin/find /var/lib/amavis -maxdepth 1 -name 'amavis-*' -type d -exec rm -rf "{}" \;
/usr/bin/find /var/lib/amavis/tmp -maxdepth 1 -name 'amavis-*' -type d -exec rm -rf "{}" \;
}

reload() {
ebegin "Reloading $RC_SVCNAME"
/usr/sbin/amavisd-new reload
# /bin/kill -HUP $(cat /var/run/amavis/amavisd.pid)
eend $?
}

خب بریم سراغ مقدمه:
اسکریپت های openrc در شاخه /etc/init.d/ نگه داری میشن و شما باید اسکریپت خودتون رو در اونجا بزارید.
یک پرونده بسازید در اون شاخه بسازید (مثلا test)
sudo nano test
حالا باید شروع کنیم:
در ابتدا پرونده خط زیرو می‌نویسیم چرا؟ چون باید به سامانه گفته بشه این پرونده باید توسط برنامه openrc-run (در شاخه /sbin/) اجرا بشه:
#!/sbin/openrc-run
سپس باید یک نام برای این خدمتمون مشخص کنید. مثلا همون test:
name="test"
راستی یک نکته: می‌تونید از متغیر $RC_SVCNAME استفاده کنید. در این صورت اسم این خدمت مطابق با اسم پرونده اسکریپت خواهد بود. مثلا اگر اسم test.initd رو برای پرونده مون بزاریم همین میشه اسم خدمت ما. از این متغیر می‌تونید به شکل زیر استفاده کنید:
name=$RC_SVCNAME
بعد انتخاب اسم باید بریم سراغ اطلاعات بیشتر یا دسکریپشن. این بخش الزامی نیست اما خوبه که باشه.
برای این بخش یک متن بسازید (یا انتخاب کنید)
به مثال زیر توجه کنید:
description="Hello world :)"
سپس نوبت به superviser میرسه. اول باید بدونید superviser چیه.
superviser در اکثر اینیت های مدرن (از جمله: systemd، OpenRC و حتی sysvinit!) وجود داشته. فرض کنید یک برنامه دارید که باید همیشه در حال اجرا باشه. برای اینکه بتونید اینکارو انجام بدید باید یک برنامه داشته باشید که برنامه موردنظرتون رو اجرا کنه و روش نظارت کنه. اینجاست که superviser وارد میشه. superviser یک برنامه رو اجرا می‌کنه، روش نظارت می‌کنه و در صورت لزوم یکسری کار ها انجام میده (مثلا در صورتی که برنامه کرش بخوره، بعد ۱۵ ثانیه دوباره به کار می‌ اندازدش. یا شایدم یکسری متغییر محیطی تنظیم می‌کنه تا برنامه به درستی کار کنه). OpenRC به طور رسمی یک superviser به نام supervise-deamon داره. در صورتی که بهش نیاز دارید دستور زیر رو بنویسید:

ویرایش ۲۰ اردیبهشت ۱۴۰۱: supervise-daemon درسته نه supervise-deamon!

supervisor="supervise-daemon"
فعلا تا همین جا بدونید. ان‌شا‌الله اگه عمری باشه، بقشم بعدا کامل توضیح می‌دم.

راستی در دعاهاتون، بنده رو فراموش نکنید.
ایام به کام
یا علی مدد
« آخرین ویرایش: 20 اردیبهشت 1401، 12:35 ق‌ظ توسط mobin1387 »

آنلاین mobin1387

  • Sr. Member
  • *
  • ارسال: 465
  • جنسیت : پسر
  • به زودی اینجا چیزی نوشته خواهد شد!
پاسخ : نوشتن سرویس برای open rc
« پاسخ #22 : 05 اردیبهشت 1401، 03:48 ق‌ظ »
الحمدالله، شرایط جور شد، ادامه می‌دیم:
فکر می‌کنم لازم باشه بیشتر درباره superviser توضیح بدم. اول از همه بدونید ۳ اینیت مشهور از چه چیزی برای superviser استفاده می‌کنن:

OpenRC: supervise-deamon
systemd: Built-in (توضیح بیشتر: خودش به طور خودکار اینکارو می‌کنه مگر تنظیم کنید نکنه)
sysvinit: start-stop-deamon

فکر می‌کنم در سوالی در ذهنتون به وجود اومده، اونم اینه: «چه برنامه هایی نیاز به supervise دارن؟»
هر برنامه ای که باید همیشه روشن باشه، برنامه ای که برای کارکرد صحیحش به تنظیم کردن متغیر های محیطی نیاز داشته باشه و چند مورد خاص دیگه که بهتره خودتون بعدا کشفش کنید

به طور مثال nginx به این مسئله نیاز داره و اسکریپت هم بدین شکل شده:
#!/sbin/openrc-run

name=$RC_SVCNAME
description="A high performance web server and a reverse proxy server"
supervise="supervise-daemon"
command="/usr/sbin/nginx"
command_args="-g 'daemon on; master_process on;'"
pidfile="/run/nginx.pid"
extra_started_commands="reload"

depend() {
after net
use dns logger netmount
}

#stop() {
# ebegin "Stopping $RC_SVCNAME"
# /sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
# eend $?
#}

reload() {
ebegin "Reloading $RC_SVCNAME"
/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
eend $?
}
اما یک برنامه مثل mariadb به این مسئله نیاز نداره و اسکریپتش بدین شکل شد:
#!/sbin/openrc-run
extra_stopped_commands="setup"

retry="60"
pidfile="/run/mysqld/$RC_SVCNAME.pid"
command="/usr/bin/mysqld_safe"
command_args="--syslog --nowatch --pid-file=$pidfile"

depend() {
after net
after localmount
}

start_pre() {
required_dirs=$(getconf datadir "/var/lib/mysql")

if [ ! -d $required_dirs/mysql ]; then
eerror "Datadir '$required_dirs' is empty or invalid."
eerror "Run '/etc/init.d/mariadb setup' to create new database."
fi
}

start_post() {
ewaitfile 10 $(getconf socket "/run/mysqld/mysqld.sock")
}

stop() {
ebegin "Stopping $RC_SVCNAME"
/etc/init.d/mariadb_sysvinit stop
}

setup() {
ebegin "Creating a new MySQL database"
mysql_install_db --user=mysql --datadir=/var/lib/mysql
eend $?
}

getconf() {
v=$(my_print_defaults --mysqld | grep ^--$1)
[ -z $v ] && echo $2 || echo ${v#*=}
}
حالا می‌تونم، کاملا دقیق بهتون بگم کی باید از supervise-deamon استفاده کنید.
nginx یک برنامه است که به این مسئله نیاز داره. چرا؟ چون باید همیشه روشن باشه و روش نظارت بشه.
اما اگه mariadb رو با mysqld_safe اجرا کنیم، برنامه mysqld_safe خودش تمام چیز هایی که لازم هست رو راه اندازی می‌کنه و بعدا خودش بسته می‌شه.
فکر می‌کنم اگه بادقت دنبال کرده باشید، تا الآن کامل متوجه شده باشید. راستی تا اینجا خوندی بگذار بهت یک نکته بگم:
OpenRC از superviser های دیگه علاوه بر supervise-deamon خودش پشتیبانی می‌کنه مثلا s6-superviser. می‌تونید بعدا که حرفه ای شدید دربارش جستجو کنید، اگه الآن برید سراغش، ممکنه گیج بشید

بریم سراغ مسئله بعدی: command و command_args
توضیح خاصی نداره. دستور اصلی (مثلا /usr/bin/nginx) رو در command بنویسید و اگه می‌خواید آرگومان خاصی بهش بدید، اون رو در command_args بنویسید. به مثال زیر توجه کنید:
...
command="/usr/sbin/nginx"
command_args="-g 'daemon on; master_process on;'"
...
می‌تونید  تمام دستور رو در command بنویسید اما توصیه نمی‌شه و بهتره از هم تفکیکشون کنید.

مبحث بعدی: command_user
این دستور در شرایطی به درد می‌خوره که می‌خواید یک دستور تحت یک کاربر خاص (به جز کاربر ریشه) اجرا بشه. به مثال زیر دقت کنید، amavis-new لازم داره تحت کاربر amavis اجرا بشه، پس اینو می‌نویسیم:
...
command_user="amavis:amavis"
...
نکته: «کاربر:گروه کاربری» اگه لازم بود گروه کاربری رو هم مشخص کنید

مبحث بعدی: pid_file
درباره pid پیشنهاد می‌کنم که این مطلب رو از ویکی پدیای فارسی بخونید: https://fa.wikipedia.org/wiki/%D8%B4%D9%86%D8%A7%D8%B3%D9%87_%D9%81%D8%B1%D8%A7%DB%8C%D9%86%D8%AF
این pid_file می‌آید و pid پروسه والد رو در جایی که مشخص می‌کنید، می‌نویسه.

و در نهایت مبحث extra_commands ها (این مسئله پیشرفته است پیشنهاد می‌کنم که بعدا بهش فکر کنید)
ممکنه در کار اسکریپت نویسی تون بخواید یکسری کار های اضافه (به جز start stop restart zap و status) در اسکریپت طراحی کنید، اون وقت باید چه کرد؟
اینجاست که extra_commands ها وارد میشن. در اینها می‌تونید دستوراتی تعریف کنید که در حالت استاندارد تعریف نشده اند.
سه نوع از extra_commands وجود داره:

extra_commands دستوراتی که در همه حال معتبرند
extra_started_commands دستوراتی که تنها در صورت روشن بودن خدمت معتبرند
extra_stopped_commands دستوراتی که تنها در صورت خاموش بودن خدمت معتبرند

هر کدوم این سه تا به درد کار های مختلف می‌خورند که در ادامه چند نمونه از کاربرد هاش رو میگم:
۱- تعریف کردن reload برای خدمت، مشابه با systemd
برای این‌کار به extra_started_commands نیاز داریم، تعریفش می‌کنیم:
...
extra_started_commands="reload"
...
سپس در اسکریپتمون، قسمت زیرو تعریف می‌کنیم:
reload() {
ebegin "Reloading $RC_SVCNAME"
/bin/kill -USR2 $(cat /run/php/php-fpm.pid)
eend $?
}
ذخیره اش می‌کنیم و حال می‌بینیم می‌توانیم به مشابه systemd، از دستور reload استفاده کنیم.

۲- راه اندازی اولیه یک برنامه:
فرض کنیم می‌خوایم برای mariadb اسکریپت بنویسیم. می‌خواهیم درصورتی که کاربر تا به حال اقدام به ساخت پایگاه داده نکرده، بتوانید با استفاده از همین اسکریپت، این کار را انجام دهد. یک extra_stopped_comnands به نام setup تنظیم می‌کنیم:
...
extra_stopped_commands="setup"
...
و در اسکریپت بخشی به همین نام می‌نویسیم:
...
setup() {
ebegin "Creating a new MySQL database"
mysql_install_db --user=mysql --datadir=/var/lib/mysql
eend $?
}
...
حال کاربر می‌توانید با دستور setup، پایگاه داده اولیه خود را بسازد.

خب قسمت اول آموزش openrc-run تموم شد. توصیه می‌کنم پس درک کامل این آموزش به سراغ جستجو درباره openrc و openrc-run بپردازید و اطلاعات جدید کسب کنید.

در آخر خواندن صفحه man زیر بسیار توصیه می‌شود:
man openrc-run

ایام به کام یاعلی مدد
« آخرین ویرایش: 05 اردیبهشت 1401، 04:49 ق‌ظ توسط mobin1387 »

آفلاین ㅤSudoㅤ

  • High Hero Member
  • *
  • ارسال: 2313
  • جنسیت : پسر
  • Just sudo it !
پاسخ : نوشتن سرویس برای open rc
« پاسخ #23 : 05 اردیبهشت 1401، 09:43 ق‌ظ »
Wow !
سپاس ، بزودی مطالعه میکنم ارسال هاتون رو ، واقعا خوشحالم کردید 🌹
Debian Sid + Gnome , Software Freedom 💙️

آفلاین sajadspeed

  • Sr. Member
  • *
  • ارسال: 430
  • جنسیت : پسر
پاسخ : فرستادن به پس زمینه !
« پاسخ #24 : 05 اردیبهشت 1401، 12:53 ب‌ظ »
بعد از ۲۳ ساعت و سه ربع، تازه می‌رسه به تعریف تابع؟ 😱

میگم خیلی کامله (نوضیحاتش الکی نیست بدرد میخوره، 16 فصل داره!)  ;D

شاید از کاملی از دوره های پایتون جادی کامل تر باشه، اما هیچ دوره ای به دوره های جادی نمیرسه!
ببخشید من لینک برام باز نشد هر کاری کردم، ولی با تعریفی که دوستان کردن ازش میتونم این رو بگم که به این شکل وابسته شدن به یک دوره که به قول آقای بهزادی بعد از 23 ساعت تازه میرسه به تعریف تابع می‌تونه به شدت زیان‌بار بشه. اطرافم افرادی دیدم که افتادن توی دام تجاری سایت‌هایی مثل سون‌لرن که آموزش‌هایی با ساعت‌هایی به اندازه یک زندگی ارائه می‌کنن و متاسفانه اون افراد یا کلا خسته شدن و فکر کردن به درد این کار نمیخورن و رفتن، یا برای چندین سال هست که در دام کافی نبودن برای شروع گیر افتادن.
اگر قرار بود مهارت یک فرد با تعداد ساعت آموزشش باشه پس یک جدول جهانی درست می‌کنیم، هر کسی که بیشترین آموزش دیده حرفه‌ای‌تر هست و رتبه بهش میدیم.

به دست آوردن مهارت حل مسئله یا مهارت‌های فنی در یک تکنولوژی یا زبان خاص فقط قسمتی از اون به آموزش اولیه بستگی داره، بخش اعظم و بزرگ اون مربوط میشه به پروژه‌ها و مسائل چالش  برانگیزی که اون فرد خودش باهاش روبرو می‌کنه.
نکات تکمیلی که در قالب دوره‌های چند صد ساعته گفته میشه باید توسط خود فرد داخل روند پروژه درک بشه و بعد سپس خود یادگیرنده دنبال جواب بگرده. این را هم در نظر بگیرید که ممکن دوره راه‌کار قدیمی‌تری برای حل یک مشکل یا ترفندی منسوخ شده را آموزش دهد.

مثالی که میتونم بزنم این میشه که یک فرد سال‌ها بیرون از آب تمرین شنا کنه ولی یادش میره که باید اول بپره توی آب، درسته قبلش بیرون آب حداقل چندتا چیز باید یادبگیره ولی به موقعش باید بره توی دل اون کار و تمرین کنه، از یه جایی هم به بعد دیگه نیازی به استاد نداره، ذهن خودش و هوش عضلانیش آنقدر بالغ می‌شوند که بخوان برای ادامه مسیر راهنماییش کنن. فقط می‌تونه جایی که گیر افتاد از حرفه‌ای تر ها الگو بگیره یا اینکه ازشون سوال کنه و اون‌ها هم راهنمایی کنن، نه دوباره بیان عین اون استاد شنا دست و پاش کنترل کنن که چجوری اون حرکت بزنه.
« آخرین ویرایش: 05 اردیبهشت 1401، 12:57 ب‌ظ توسط sajadspeed »
اولین جرعه از لیوان علم باعث می‌شود شما یک آتئیست شوید، اما در انتهای لیوان خدا منتظر شماست...

آفلاین ali-n

  • High Hero Member
  • *
  • ارسال: 1287
  • جنسیت : پسر
  • تاریخ..
پاسخ : نوشتن سرویس برای open rc
« پاسخ #25 : 05 اردیبهشت 1401، 05:04 ب‌ظ »
سجاد پیشنهاد تو چیه برای یادگیری؟ دقیقا منم یه آموزش گرفتم از همینا که شبانه روز  ویدیو ببینی باید ماه ها بگذره تا تموم بشه و بخاطر همین موضوع فعلا نگاهش نکردم! ولی خب آموزش رایگانی که قابل فهم باشه دقیقا چیه؟ (زبان انگلیسیم خوب نیست)

آفلاین sajadspeed

  • Sr. Member
  • *
  • ارسال: 430
  • جنسیت : پسر
پاسخ : نوشتن سرویس برای open rc
« پاسخ #26 : 05 اردیبهشت 1401، 07:02 ب‌ظ »
برای چی همین پایتون؟
اولین جرعه از لیوان علم باعث می‌شود شما یک آتئیست شوید، اما در انتهای لیوان خدا منتظر شماست...

آنلاین mobin1387

  • Sr. Member
  • *
  • ارسال: 465
  • جنسیت : پسر
  • به زودی اینجا چیزی نوشته خواهد شد!
پاسخ : نوشتن سرویس برای open rc
« پاسخ #27 : 05 اردیبهشت 1401، 07:26 ب‌ظ »
قسمت دوم اسکریپت نویسی openrc-run

سلامی دوباره. سریع بریم سراغ مبحث های باقی مانده:
اول می‌خوام یکسری دستور دیگرو بهتون بگم:
۱- supervise_deamon_args:
من در مثال های قبلی گفتم supervise یک برنامه است که یک برنامه رو راه اندازی می‌کنه، روش نظارت می‌کنه و درصورت لزوم روش یکسری کار انجام می‌ده. خب چطور باید به superviser گفت که یکسری کار خاص انجام بده؟ اینجاست که کاربرد supervise_deamon_args مشخص می‌شه.
با استفاده از این دستور می‌تونید یکسری آرگومان خاص به supervise-deamon بدید تا کارهای مختلفی انجام بده. اول supervise_deamon_args رو در اسکریپتمون می‌نویسیم(نکته یادتون نره supervise=supervise-deamon رو قبلش بنویسید!):
...
supervise_deamon_args=""
...
حالا آرگومان های مدنظرمون رو در بین "" قرار می‌دیم. من اینجا سه تا از پرکاربرد ترین هاش رو می‌گم:
--env: با استفاده از این آرگومان می‌تونید برای برنامه موردنظر متغیر های محیطی تنظیم کنید. به مثال‌های زیر توجه کنید:
۱- من می‌خوام برنامه موردنظر از تور رد بشه پس من لازم دارم متغیر محیطی HTTP_PROXY=localhost:9080 تنظیم کنم به صورت زیر اعمالش می‌کنم:
...
supervise_deamon_args="--env export HTTP_PROXY=localhost:9080"
...
۲- من می‌خوام یک برنامه گرافیکی با استفاده از اسکریپت های openrc باز کنم و می‌خوام این برنامه در صفحه نمایشی به جز صفحه نمایشگر خودم نشون داده بشه، پس اینکارو می‌کنم:
...
supervise_deamon_args="--env export DISPLAY=1"
...
حالا برنامه در صفحه نمایشگر شماره ۱ اجرا می‌شه

--stdout: خروجی که برنامه در حالت عادی به خط فرمان نشون می‌ده رو در یک پرونده ذخیره می‌کنه
برای مثال این برای یک برنامه که به طور بومی از log file پشتیبانی نمی‌کنه عالیه. این دستور به صورت زیر استفاده می‌شه:
...
supervise_deamon_args="--stdout [PATH]"
...
و به طور مثال:
...
supervise_deamon_args="--stdout /var/log/test.log"
...

--stderr: این مورد مشابه موردقبلی است اما زمانی به درد می‌خورد که می‌خواهید خطا های برنامه را از خروجی عادی برنامه تفکیک کنید
syntax هم مانند --stdout هست.
به طور مثال:
...

supervise_deamon_args="--stdout /var/log/test.log --stderr /var/log/test-err.log"
...

supervise-deamon کلی آرگومان دیگه هم داره که در صفحه man زیر کامل توضیحشون داده:
man supervise-deamon

میریم سراغ بخش بعدی، بخش های مختلف (start stop *_pre *_post و ...)

syntax قسمت های مختلف اسکریپت مشابه با c است:
...
example() {
 ebegin "Test message"
}
...

در حالت استاندارد، شما نیازی به استفاده از start و stop ندارید چراکه openrc اون هارو به طور خودکار هندل (فارسیش چی می‌شه؟) می‌کنه. (استثنا: یکسری کار های خیلی خاص هنوزم نیاز دارن)

اما یکی از مهمترین قسمت‌ها، depend است. با استفاده از depend می‌تونید وابستگی هر برنامه رو تعریف کنید. بخش آن اینگونه نوشته می‌شود:
depend() [
  [code]
}

depend چند دستور دارد که به ترتیب آنها را توضیح خواهم داد:
after
before
use
need
provide
want

after:
فرض کنید برنامه ای داریم که می‌تواند به اینترنت متصل شود اما برای کارکرد درستش به اینترنت نیاز ندارد پس تنظیم می‌کنم openrc خدمت net رو راه اندازی کرد سپس برنامه من را راه اندازی کنید. اینجاست که after استفاده می‌شود:
...
depend() {
  after net
}
...
before:
فرض کنید برنامه ای داریم که باید قبل از اتصال اینترنت راه اندازی شود اما net برای راه اندازی خودش به آن نیاز ندارد. اینجاست که before استفاده می‌شود:
...
depend() {
  before net
}
...

فکر می‌کنم برای قسمت دوم تا همین جا کافیست. خدانگهدار

آفلاین ali-n

  • High Hero Member
  • *
  • ارسال: 1287
  • جنسیت : پسر
  • تاریخ..
پاسخ : نوشتن سرویس برای open rc
« پاسخ #28 : 05 اردیبهشت 1401، 09:50 ب‌ظ »
نقل‌قول
برای چی همین پایتون؟
اره یه آموزش خوب و  رایگان باشه خلاصه ;) راستش نمیدونم فرایند یادگیری چطوره یکی ۴۰ تا ویدیو میگه خوبه یکی ۸۰ تاس میگه کامل نیست! چون کمه دقیق و درست یاد نمیده..  اگه زحمتی نیست نکته ای اگه در یادگیری هست هم بگی(:

آفلاین sajadspeed

  • Sr. Member
  • *
  • ارسال: 430
  • جنسیت : پسر
پاسخ : نوشتن سرویس برای open rc
« پاسخ #29 : 05 اردیبهشت 1401، 10:57 ب‌ظ »
نقل‌قول
برای چی همین پایتون؟
اره یه آموزش خوب و  رایگان باشه خلاصه ;) راستش نمیدونم فرایند یادگیری چطوره یکی ۴۰ تا ویدیو میگه خوبه یکی ۸۰ تاس میگه کامل نیست! چون کمه دقیق و درست یاد نمیده..  اگه زحمتی نیست نکته ای اگه در یادگیری هست هم بگی(:
خوب ببینید بستگی داره که تجربه شما در برنامه‌نویسی چقدر هست، آیا زبان دیگری هم کار کردید یا نه؟ چون اکثر آموزش‌های یک زبان فقط تا یه جایی آموزش سینتکس اون زبان و نحوه رفتار با اون هستن، بقیش می‌ره توی مسائل بیسیک حل مسئله و تکنیک‌ها
یکم بیشتر در مورد خودتون و هدفتون توضیح بدید شاید بتونم کمک کنم، البته من تخصص اصلیم پایتون و یا فریمورک‌هاش نیست ولی خیلی ازش استفاده می‌کنم
اولین جرعه از لیوان علم باعث می‌شود شما یک آتئیست شوید، اما در انتهای لیوان خدا منتظر شماست...