ران شدن یک کد به صورت خودکار با روشن شدن رزبری پای

سلام وقتتون بخیر دوستان. :smiley: :raised_hand_with_fingers_splayed:
برای پروژه ای نیاز دارم که پس از روشن شدن رزبری پای، نرم افزار vlc باز بشه و از روی یک rtsp شروع به استریم کنه.
در حال حاضر میتونم این کار رو با نوشتن دستی یک خط در ترمینال رزبرین انجامش بدم ولی میخوام که به صورت اتوماتیک بلافاصله پس از روشن شدن رزبری این اتفاق بیفته و خط کد ران بشه. چه راهکاری پیشنهاد میدید؟ :thinking:

1 پسندیده

سلام بر شما.
روش های مختلفی برا انجام این کار هست ، اما من ساده ترین رو توضیح میدم.
فایلی به نام rc.local توی فایل های رزبری وجود داره که بعد از بوت اجرا میشه و هر کامندی که داخلش باشه رو اجرا میکنه ، با این دستور میتونید این فایل رو ادیت کنید

sudo nano /etc/rc.local

دو تا نکته رو باید توی این فایل رعایت کنید

  • اول اینکه در صورتی که کامند شما به صورت ادامه دار اجرا میشه (مثلا کامند شما یه حلقه while هست که همون لحظه تموم نمیشه ) باید در انتهای اون خط دستور یک & بزارید که بدونه به این صورت هست و ازش عبور کنه و بره خط بعدی .(که به احتمال زیاد دستور شما همین وضعیت رو داره)
  • نکته دوم هم اینکه در خط آخر این فایل حتما باید دستور exit 0 وجود داشته باشه

این هم یک نمونه از فایل rc.local

echo "start vlc"
cvlc rtsp://username:password@ip-address/streamXXX &
exit 0

توی این لینک میتونید کامل تر در مورد این موضوع بخونید

3 پسندیده

و نکته ی سوم بیت اجرایی این اسکریپت به صورت پیشفرض صفر هست و شما باید با دستور زیر اون رو فعال کنید:

sudo chmod +x /etc/rc.local

و نکته ی چهارم به هردلیلی اگر برنامه ی مورد نظر کراش و خارج کرد، تا راه اندازی دوباره ی سیستم برنامه اجرا نخواهد شد حالا دو راه برای رفع این مشکل وجود داره:

  1. شما یک اسکریپت بنویسید که به نحوی بتونه از کار افتادن برنامتون رو تشخیص بده و در صورت قطع شدن دوباره برنامه رو اجرا کنه و یک cornjob تنظیم کنید تا به صورت دوره ای اسکریپت رو اجرا کنه. در این صورت بازهم نسبت به زمانی که شما برای cornjob در نظر گرفتید ممکنه از کار افتادن برنامه مشکل ساز بشه.

۲. این راه حل اصولی تر هست. شما یک اسکریپت بنویسید برای اجرای برنامه و اسکریپت رو به صورت سرویس اجرا کنید. این روش علاوه بر اینکه بعد از روشن شدن به صورت اتوماتیک برنامه رو اجرا میکنه بلکه به صورت خودکار اگر برنامه متوقف شد اون رو دوباره اجرا خواهد کرد. برای اطلاعات بیشتر به لینک زیر مراجعه کن :

https://abhinand05.medium.com/run-any-executable-as-systemd-service-in-linux-21298674f66f

2 پسندیده