انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: سودو. در 31 فروردین 1401، 09:16 قظ
-
سلام دوستان !
(https://forum.ubuntu-ir.org/index.php?action=dlattach;topic=154820.0;attach=53035;image)
همنیجوری جهت تمرین ، این رو نوشتم برای اجرای دستور مد نظر در زمانی مشخص ( برای دانلود شبانه 😅️ ) ! سینتکسش هم در خط آخر مشخصه ، قصد دارم به مرور امکانات بیشتری بهش اضافه کنم مثل خوندن دستورات و زمان از فایل !
( میدونم نرم افزار هایی هستن که اینکارو انجام میدن مثل at اما من قصدم یادگیریه )
مشخصه که باید ترمینال باز باشه تا آخرش و خط فرمان هم در اختیارت نیس ! چجوری بفرستمش به پس زمینه بدون اینکه نیاز باشه پایانه باز بمونه ؟ خروجیش رو هم قطعا نمیتونم داشته باشم نه ؟ مثلا باید بریزمش تو یه فایل ! اما اخه بعضی دستورات مثل آدم خروجیشون رو نمیدن بریزی توی یه پرونده ! مثل apt و wget ( چرا ؟ )
یه چیزایی در مورد nohub شنیدم ! مال همین کاره ؟ چجوری میشه باهاش کار کرد ؟
-
با پایتون بنویسید راحت تره!
آخر دستور وقتی اجراش میکنید یه & بزارید فکر کنم حل شه! (یا یه لاگ فایل براش بسازید و خروجیش رو بفرستید تو اون!)
-
فعلا همین بش اسکریپت کافیه ، بعدا میام پایتون ! اتفاقا دوره های جادی رو هم گرفتم !
با اون & هم امتحان کردم قبلا ، اون چیزی که نشد که میخواستم !
-
فعلا همین بش اسکریپت کافیه ، بعدا میام پایتون ! اتفاقا دوره های جادی رو هم گرفتم !
دوره های جادی بهترینه!
به این دوره هم یه نگاهی بندازید (کیفیت خیلی خوبی داره و میتونم بگم کامل ترین دوره پایتون ایرانه): https://sabzlearn.ir/product/python/
-
چرا از screen استفاده نمیکنی؟
-
اخ اره ! اصلا یادم نبود 😃 تشکر
( ولی در کل اگه این بخواد نقش یه برنامه رو بازی کنه از چه روشی باید استفاده کرد ؟ )
به این دوره هم یه نگاهی بندازید
خب این چه کاریه ؟ الان موندم تو دوراهی که کدومو ببینم ؟ 😐
-
برنامهها که همه اینجورین. اگه م یخوای تو پسزمینه اجرا بشه، باید به صورت خدمت بنویسیاش.
-
خب این چه کاریه ؟ الان موندم تو دوراهی که کدومو ببینم ؟ 😐
دومی خیلی کامل تره (فرصت رو از دست ندید، دوره 6 میلیونه!)
-
برنامهها که همه اینجورین. اگه م یخوای تو پسزمینه اجرا بشه، باید به صورت خدمت بنویسیاش.
راهنمایی میکنید چجوری سرویس بنویسم ؟ ترجیحا برای open rc
( مبین جان کجایی ؟ )
-
خب این چه کاریه ؟ الان موندم تو دوراهی که کدومو ببینم ؟ 😐
دومی خیلی کامل تره (فرصت رو از دست ندید، دوره 6 میلیونه!)
به مدت محدود رایگانه ؟
شما دوره های پولی جادی رو دیدی ؟
-
شما دوره های پولی جادی رو دیدی ؟
من زندگیمو با جادی گذروندم : )))
-
دومی خیلی کامل تره (فرصت رو از دست ندید، دوره 6 میلیونه!)
بعد از ۲۳ ساعت و سه ربع، تازه میرسه به تعریف تابع؟ 😱
-
بعد از ۲۳ ساعت و سه ربع، تازه میرسه به تعریف تابع؟ 😱
میگم خیلی کامله (نوضیحاتش الکی نیست بدرد میخوره، 16 فصل داره!) ;D
شاید از کاملی از دوره های پایتون جادی کامل تر باشه، اما هیچ دوره ای به دوره های جادی نمیرسه!
-
دومی خیلی کامل تره (فرصت رو از دست ندید، دوره 6 میلیونه!)
بعد از ۲۳ ساعت و سه ربع، تازه میرسه به تعریف تابع؟ 😱
مگه بده کامل توضیح بده؟
خب این چه کاریه ؟ الان موندم تو دوراهی که کدومو ببینم ؟ 😐
دومی خیلی کامل تره (فرصت رو از دست ندید، دوره 6 میلیونه!)
۶ میلیون ریال دیگه ;D
انقدر بدم میاد ازین شیوه تبلیغ، که میان الکی یک رقم بالا میزارن بعد میگن تخفیف گذاشتیم رایگانه!
بعد از ۲۳ ساعت و سه ربع، تازه میرسه به تعریف تابع؟ 😱
میگم خیلی کامله (نوضیحاتش الکی نیست بدرد میخوره، 16 فصل داره!) ;D
شاید از کاملی از دوره های پایتون جادی کامل تر باشه، اما هیچ دوره ای به دوره های جادی نمیرسه!
کامل توضیح دادن جدا، کش دادن الکی یک موضوع جدا.
بعضی مدرسا روی یک موضوع انقدر تمرکز میکنن آدم اعصابش خورد میشه.
-
۶ میلیون ریال دیگه ;D
انقدر بدم میاد ازین شیوه تبلیغ، که میان الکی یک رقم بالا میزارن بعد میگن تخفیف گذاشتیم رایگانه!
آخه دوره های دیگه سایت رو ببینید! فکر نکنم با 10 هزار تومن دوره بدن!
-
من خودم حاشیه ساز این انجمنم ، اومدین تو تاپیک من حاشیه بازی ؟ 😂
مبین کجایی بیا ساختن سرویس برای open rc چجوریه ؟
-
۶ میلیون ریال دیگه ;D
انقدر بدم میاد ازین شیوه تبلیغ، که میان الکی یک رقم بالا میزارن بعد میگن تخفیف گذاشتیم رایگانه!
آخه دوره های دیگه سایت رو ببینید! فکر نکنم با 10 هزار تومن دوره بدن!
نه هب الان دوره هایی که میان مثلا یک زبان برنامه نویسی رو یاد میدن تقریباً توی اکثر وب سایت ها رایگانن.
معمولاً میان دوره هایی که توش دارن به صورت تخصصی چیزی رو یاد میدن یا یک فریمورک رو آموزش میدن رو نقدی میکنن.
وگرنه پایتون که پره تو اینترنت.
-
من خودم حاشیه ساز این انجمنم ، اومدین تو تاپیک من حاشیه بازی ؟ 😂
بهرام که گور میگرفتی همه عمر
دیدی که چگونه گور بهرام گرفت
;D ;)
-
دومی خیلی کامل تره (فرصت رو از دست ندید، دوره 6 میلیونه!)
بعد از ۲۳ ساعت و سه ربع، تازه میرسه به تعریف تابع؟ 😱
اصلا پیشنهاد نمیکنمش دوره ای که اینطوری باشه
دوره ای که من میدیدم جلسه حدودا سی ام رسید به توابع من هم بعد جلسه چهل دلم تنگ شد زده شدم دیگه ادامه ندادم دوره باید جمع و جور باشه و جزئیات زبان باید وقت استفاده یاد گرفته بشه
-
بزرگواران ، نوشتن سرویس برای open rc چجوریه ؟ از مقالات اینترنتی سر در نمیارم زیاد !
-
بزرگواران ، نوشتن سرویس برای open rc چجوریه ؟ از مقالات اینترنتی سر در نمیارم زیاد !
زمانی که آرتیکس داشتم یه سرویس برای کنترل نور پس زمینه نوشتم که اسکریپت بش رو جناب دراگون زحمت کشیدن.
الان دیگه OpenRC ندارم اما میدونم یه سرویس ساده کمتر از ۱۰ خط کد میخواد. این لینک (https://wiki.alpinelinux.org/wiki/Writing_Init_Scripts) میتونه کمک کنه.
این لینک (https://github.com/OpenRC/openrc/blob/master/service-script-guide.md) هم مال خود 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 نیست.
-
سلام. یک مدت نبودم
برای چی به اسکریپت نیاز دارید؟ راهاندازی خدمت یا دیمن، شایدم یک کار ساده؟
اینجا مشخص میشه چرا اصرار داشتم 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"
فعلا تا همین جا بدونید. انشاالله اگه عمری باشه، بقشم بعدا کامل توضیح میدم.
راستی در دعاهاتون، بنده رو فراموش نکنید.
ایام به کام
یا علی مدد
-
الحمدالله، شرایط جور شد، ادامه میدیم:
فکر میکنم لازم باشه بیشتر درباره 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
ایام به کام یاعلی مدد
-
Wow !
سپاس ، بزودی مطالعه میکنم ارسال هاتون رو ، واقعا خوشحالم کردید 🌹
-
بعد از ۲۳ ساعت و سه ربع، تازه میرسه به تعریف تابع؟ 😱
میگم خیلی کامله (نوضیحاتش الکی نیست بدرد میخوره، 16 فصل داره!) ;D
شاید از کاملی از دوره های پایتون جادی کامل تر باشه، اما هیچ دوره ای به دوره های جادی نمیرسه!
ببخشید من لینک برام باز نشد هر کاری کردم، ولی با تعریفی که دوستان کردن ازش میتونم این رو بگم که به این شکل وابسته شدن به یک دوره که به قول آقای بهزادی بعد از 23 ساعت تازه میرسه به تعریف تابع میتونه به شدت زیانبار بشه. اطرافم افرادی دیدم که افتادن توی دام تجاری سایتهایی مثل سونلرن که آموزشهایی با ساعتهایی به اندازه یک زندگی ارائه میکنن و متاسفانه اون افراد یا کلا خسته شدن و فکر کردن به درد این کار نمیخورن و رفتن، یا برای چندین سال هست که در دام کافی نبودن برای شروع گیر افتادن.
اگر قرار بود مهارت یک فرد با تعداد ساعت آموزشش باشه پس یک جدول جهانی درست میکنیم، هر کسی که بیشترین آموزش دیده حرفهایتر هست و رتبه بهش میدیم.
به دست آوردن مهارت حل مسئله یا مهارتهای فنی در یک تکنولوژی یا زبان خاص فقط قسمتی از اون به آموزش اولیه بستگی داره، بخش اعظم و بزرگ اون مربوط میشه به پروژهها و مسائل چالش برانگیزی که اون فرد خودش باهاش روبرو میکنه.
نکات تکمیلی که در قالب دورههای چند صد ساعته گفته میشه باید توسط خود فرد داخل روند پروژه درک بشه و بعد سپس خود یادگیرنده دنبال جواب بگرده. این را هم در نظر بگیرید که ممکن دوره راهکار قدیمیتری برای حل یک مشکل یا ترفندی منسوخ شده را آموزش دهد.
مثالی که میتونم بزنم این میشه که یک فرد سالها بیرون از آب تمرین شنا کنه ولی یادش میره که باید اول بپره توی آب، درسته قبلش بیرون آب حداقل چندتا چیز باید یادبگیره ولی به موقعش باید بره توی دل اون کار و تمرین کنه، از یه جایی هم به بعد دیگه نیازی به استاد نداره، ذهن خودش و هوش عضلانیش آنقدر بالغ میشوند که بخوان برای ادامه مسیر راهنماییش کنن. فقط میتونه جایی که گیر افتاد از حرفهای تر ها الگو بگیره یا اینکه ازشون سوال کنه و اونها هم راهنمایی کنن، نه دوباره بیان عین اون استاد شنا دست و پاش کنترل کنن که چجوری اون حرکت بزنه.
-
سجاد پیشنهاد تو چیه برای یادگیری؟ دقیقا منم یه آموزش گرفتم از همینا که شبانه روز ویدیو ببینی باید ماه ها بگذره تا تموم بشه و بخاطر همین موضوع فعلا نگاهش نکردم! ولی خب آموزش رایگانی که قابل فهم باشه دقیقا چیه؟ (زبان انگلیسیم خوب نیست)
-
برای چی همین پایتون؟
-
قسمت دوم اسکریپت نویسی 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
}
...
فکر میکنم برای قسمت دوم تا همین جا کافیست. خدانگهدار
-
برای چی همین پایتون؟
اره یه آموزش خوب و رایگان باشه خلاصه ;) راستش نمیدونم فرایند یادگیری چطوره یکی ۴۰ تا ویدیو میگه خوبه یکی ۸۰ تاس میگه کامل نیست! چون کمه دقیق و درست یاد نمیده.. اگه زحمتی نیست نکته ای اگه در یادگیری هست هم بگی(:
-
برای چی همین پایتون؟
اره یه آموزش خوب و رایگان باشه خلاصه ;) راستش نمیدونم فرایند یادگیری چطوره یکی ۴۰ تا ویدیو میگه خوبه یکی ۸۰ تاس میگه کامل نیست! چون کمه دقیق و درست یاد نمیده.. اگه زحمتی نیست نکته ای اگه در یادگیری هست هم بگی(:
خوب ببینید بستگی داره که تجربه شما در برنامهنویسی چقدر هست، آیا زبان دیگری هم کار کردید یا نه؟ چون اکثر آموزشهای یک زبان فقط تا یه جایی آموزش سینتکس اون زبان و نحوه رفتار با اون هستن، بقیش میره توی مسائل بیسیک حل مسئله و تکنیکها
یکم بیشتر در مورد خودتون و هدفتون توضیح بدید شاید بتونم کمک کنم، البته من تخصص اصلیم پایتون و یا فریمورکهاش نیست ولی خیلی ازش استفاده میکنم
-
اره یه آموزش خوب و رایگان باشه خلاصه ;) راستش نمیدونم فرایند یادگیری چطوره یکی ۴۰ تا ویدیو میگه خوبه یکی ۸۰ تاس میگه کامل نیست! چون کمه دقیق و درست یاد نمیده.. اگه زحمتی نیست نکته ای اگه در یادگیری هست هم بگی(:
توی وبسایت مکتبخونه شاید یه چیزی پیدا کنید. دورههای رایگان هم داره.
-
خوب ببینید بستگی داره که تجربه شما در برنامهنویسی چقدر هست، آیا زبان دیگری هم کار کردید یا نه؟ چون اکثر آموزشهای یک زبان فقط تا یه جایی آموزش سینتکس اون زبان و نحوه رفتار با اون هستن، بقیش میره توی مسائل بیسیک حل مسئله و تکنیکها
یکم بیشتر در مورد خودتون و هدفتون توضیح بدید شاید بتونم کمک کنم، البته من تخصص اصلیم پایتون و یا فریمورکهاش نیست ولی خیلی ازش استفاده میکنم
صحیح، من تاحالا زبان برنامه نویسی کار نکردم! ولی همیشه میخواستم پایتون یاد بگیرم و بعضی موقع یه پنج شیش تا ویدیو اولیش میبینم و بعدش فکر میکنم که نمیشه! هدفمم فعلا ساخت چند برنامه ساده هست علاقه هم دارم ، بلد نیستم ولی فک کنم انقدر گفته شد سینتکس باید درمورد صحیح نوشته شدن برناممه باشه(شایدم اشتباه میگم)
توی وبسایت مکتبخونه شاید یه چیزی پیدا کنید. دورههای رایگان هم داره.
ممنونم
پن: فک کنم موضوع یکم دارم زیادی پرت میکنم (:
-
ببینید خوب به قطع دورهای که کاملا به شکل اصولی بخواد همه چی توضیح بده و بگه نیست، من الان سرچ کردم و یه سری دورهها را بررسی کردم براتون و به نظرم دوره زیر هم سر فصل خوبی و هم یک نمونه ازش دیدم تولید محتوای مناسبی داشت.
https://toplearn.com/courses/2150/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-(-python-) (https://toplearn.com/courses/2150/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86-%D9%BE%D8%A7%DB%8C%D8%AA%D9%88%D9%86-(-python-))
البته باید توجه داشته باشید که برای شروع اینجور نیست که شما فقط بیشینید فیلم ببینید و برنامهنویس بشید، به قطع باید تمرین کنید و مسئله حل کنید تا مهارت حل مسئله شما روز به روز بهتر بشه.
البته دوستانی که خودشون از روی دورهای پایتون یاد گرفتن شاید بهتر بتونن کمک کنن.
در مورد اینکه تمرینها و سوالات برنامهنویسی از کجا به دست بیارید من برای یه بنده خدای دیگه کامل توضیح داده بودم و چندتا لینک کاربردی هم براش فرستادم، وقت ندارم بخوام برم توی ارسالهام ببینم ولی اگر خواستید خودتون میتونید توی ارسالهای بنده دنبالش بگردید و پیداش کنید. میتونید دورههای پولی مکتبخونه را بررسی کنید و قسمت پروژهها و تمرینهاش رو سرفصلهاش ببینید و پیادهسازی کنید. اکثرا چون ساده هستن نیازی به توضیحات ندارن و با همون عنوان پروژه شما متوجه مسئله میشوید و نیازی به خرید دورهها ندارید.
در ضمن خود بنده پایتون برای شروع برنامهنویسی مناسب نمیدونم ولی اگر میگید علاقه دارید بهش که خوب مشکلی نداره، علاقه مهمتره.
پ.ن: اون قضیهای هم که میگید هی ولش میکنید به این خاطر هست که خودتون مسائل گفته شده توی دورهها را تمرین نمیکنید، هر چند ساده باشه باید خودتون یک بار دیگه بنویسید، تا جایی که دوره پیش رفت میتونید خودتون خلاقیت بدید و برنامههای نوشته شده را تغییر بدید و یا برنامه جدیدی که دوستدارید بنویسید.
-
میشه لطفا در پیغام خصوصی ادامه بدید ؟ انحراف هم حد و مرز داره 😁
خودم وقتی میبینم بحث اصلی تاپیک تموم شده در مورد موضوعات دیگه حاشیه میرم 😊
-
خیلی ممنونم دمت گرم از وقتی که گذاشتی و راهنمایی هایی که کردی((قلب))
میشه لطفا در پیغام خصوصی ادامه بدید ؟ انحراف هم حد و مرز داره 😁
خودم وقتی میبینم بحث اصلی تاپیک تموم شده در مورد موضوعات دیگه حاشیه میرم 😊
خوبه سعی میکنم جاتو نگیرم😂 انحرافات من پایان یافت
-
میشه لطفا در پیغام خصوصی ادامه بدید ؟ انحراف هم حد و مرز داره 😁
خودم وقتی میبینم بحث اصلی تاپیک تموم شده در مورد موضوعات دیگه حاشیه میرم 😊
بله معذرت میخواهم.
-
نه اقا این چه حرفیه ، عذر خواهی چرا ؟ تاج سرید ، خودمم استفاده کردم 😊
-
لطف دارید خواهش میکنم.
-
بسیار خب مبین جان ، بالاخره فرصت کردم مطالعه و امتحان کنم ( به کسی نگید ولی در واقع یادم رفته بود ! )
خیلی خیلی جالب بود ، دمت گرم ، خیلی چیزا یاد گرفتم بزرگوار : )
یکی نوشتم ولی خب تا حدودی غیر اصولی ! اگه کار میکنه و مشکلی پیش نمیاد همینجوری ازش راضیم ..
ببین من میخوام وقتی خواستم با دستور at بتونم بگم فلان ساعت اجرا کن فلان دستور رو ، و نیازی هم نباشه ترمینالی باز بمونه ، چیکار باید بکنم ؟ طبق چیزایی که فهمیدم اینو نوشتم ، ولی چجوری باید اجراش کنم ؟ موقع اجرا آرگومان ها رو کجا باید بهش بدم ؟
(https://forum.ubuntu-ir.org/index.php?action=dlattach;topic=154820.0;attach=53269;image)
-
بسیار خب مبین جان ، بالاخره فرصت کردم مطالعه و امتحان کنم ( به کسی نگید ولی در واقع یادم رفته بود ! )
خیلی خیلی جالب بود ، دمت گرم ، خیلی چیزا یاد گرفتم بزرگوار : )
یکی نوشتم ولی خب تا حدودی غیر اصولی ! اگه کار میکنه و مشکلی پیش نمیاد همینجوری ازش راضیم ..
ببین من میخوام وقتی خواستم با دستور at بتونم بگم فلان ساعت اجرا کن فلان دستور رو ، و نیازی هم نباشه ترمینالی باز بمونه ، چیکار باید بکنم ؟ طبق چیزایی که فهمیدم اینو نوشتم ، ولی چجوری باید اجراش کنم ؟ موقع اجرا آرگومان ها رو کجا باید بهش بدم ؟
ببین. اگه میخوای یک دستورو در زمان (های) مشخصی اجرا کنی باید از cron استفاده کنی. تا جایی که یادمه تنها initی که از سرویس های زمانبندی شده بدون cron پشتیبانی کنه فقط خود systemdه. استفاده از cron هم ساده است. اسکریپت موردنظرتو در یک پرونده قابل اجرا (chmod +x) بزار و بعد با دستور زیر crontab رو باز کن:
crontab -e
در ابتدا پرونده ای که باز میشه یک راهنمای کوتاه اما مفید نوشته که چطور باید ازش استفاده کنی. مثلا من اینو توش نوشتم:
## With logger:
#0 * * * * /home/mobin/update.sh 2>&1 | /usr/bin/logger -t Artix_linux_mirror_Updater>
## Without logger:
#0 * * * * /home/mobin/update.sh
## Stdout to home
0 * * * * /home/mobin/update.sh >> /home/mobin/update.log
من تنظیم کردم هر یک ساعت یکبار اسکریپت update.sh موجود در شاخه خانه منو اجرا کنه و خروجی اونو به /home/mobin/update.log بفرسته.
-
در نهایت با دستور زیر ببین خدمت cron درحال اجراست یا نه:
sudo rc-service cron status
و با دستور زیر به شروع به کار سامانه اضافش کن:
sudo rc-update add cron defualt
-
از کرون خبر دارم ، اما میخواستم یاد بگیرم یه اسکریپت کوچولو بنویسم که با اجراش ، ارگومان دوم که یه دستور هست رو در زمانی که در ارگومان اول داده شده بهش ، اجراش کنه ولی لازم نباشه ترمینال رو باز نگه دارم ، یعنی میخوام تبدیل به سرویس شه ..