هل ما زلت بحاجة إلى rc.local؟
سنتعلم في هذا الدليل المفصل خطوة بخطوة كيفية إنشاء ملف تقليدي. rc.local في توزيعات لينكس الشائعة مثل أوبونتو، نظام التشغيل CentOS و ألما لينكس قم بتمكين وتشغيل البرامج النصية أو الأوامر المطلوبة عند بدء التشغيل.
بالرغم من نظام دي أصبح شائعًا كإعداد افتراضي، rc.local لا يزال هذا الأسلوب مفيدًا لتنفيذ البرامج النصية القصيرة بسرعة وسهولة عند بدء التشغيل. فيما يلي طرق وأمثلة ونصائح أمنية وبدائل حديثة.
تفعيل rc.local في أوبونتو (18.04، 20.04، 22.04 والإصدارات الأحدث)
في إصدارات أوبونتو الجديدة التي نظام دي يمكن تفعيل rc.local كما يلي. تتضمن الخطوات العامة إنشاء الملف، وتعيين الأذونات، وإنشاء/تفعيل وحدة للتوافق مع systemd.
الجنرالات
- إنشاء ملف /etc/rc.local ثم أضف سطر shebang والأوامر المطلوبة.
- منح إذن تنفيذ الملف.
- قم بإنشاء أو تمكين وحدة rc.local في systemd (إذا لم تكن موجودة).
- تحميل الخدمة وتفعيلها والتحقق من حالتها.
مثال على ملف نموذجي /etc/rc.local (دائماً في النهاية) مخرج 0 مكان):
#!/bin/bash
# Example: start Docker container named myapp
docker start myapp || docker run -d --name myapp myimage
# simple sysctl
/sbin/sysctl -w net.ipv4.ip_forward=1
exit 0ثم قم بتعيين الإذن:
sudo chmod +x /etc/rc.localإذا لم تكن الوحدة المقابلة موجودة، فأنشئها:
sudo tee /etc/systemd/system/rc-local.service > /dev/null <<'EOF'
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOFوأخيراً:
sudo systemctl daemon-reload
sudo systemctl enable rc-local.service
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
sudo journalctl -u rc-local.service -b
تفعيل rc.local على CentOS 7/8 و AlmaLinux 8/9
تختلف مسارات التوزيعات القائمة على RHEL؛ المسار التقليدي عادةً ما يكون /etc/rc.d/rc.local الخطوات العامة مشابهة لـ Ubuntu، ولكن انتبه إلى مسار SELinux والملاحظات.
الطرق الشائعة
- /etc/rc.d/rc.local المسار التقليدي هو في RHEL/CentOS.
- في بعض الأنظمة، قد يكون الرابط /etc/rc.local أن يوجد.
خطوات التفعيل (CentOS / AlmaLinux)
إنشاء/تعديل ملف:
sudo nano /etc/rc.d/rc.local
#!/bin/bash
# Example: mount NFS or start a container
mount -a
/usr/bin/my-startup-script.sh &
exit 0رخصة تنفيذية:
sudo chmod +x /etc/rc.d/rc.localإذا لم تكن الوحدة موجودة، فأنشئها:
sudo tee /etc/systemd/system/rc-local.service > /dev/null <<'EOF'
[Unit]
Description=/etc/rc.d/rc.local Compatibility
ConditionPathExists=/etc/rc.d/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.d/rc.local start
TimeoutSec=0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOFوثم:
sudo systemctl daemon-reload
sudo systemctl enable rc-local.service
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
sudo journalctl -u rc-local.service -bsudo restorecon -v /etc/rc.d/rc.local
# or temporarily change context
sudo chcon -t bin_t /etc/rc.d/rc.localمن الأفضل أيضاً استخدام المسارات المطلقة في البرامج النصية مثل /usr/bin/docker يُستخدم لتقليل الاعتماد على PATH.
أمثلة عملية ونصائح عملية
مثال - تشغيل برنامج تشغيل Docker
#!/bin/bash
# start redis container at boot
/usr/bin/docker run -d --name redis-cache --restart unless-stopped redis:6
exit 0ملحوظة: استخدم الخيار --إعادة التشغيل ما لم يتم إيقافها يجعل Docker يتعامل مع عملية التراجع عن الحاوية.
مثال - قم بتثبيت الشبكة قبل تشغيل الخدمة
إذا كان البرنامج النصي يتطلب عمليات ربط NFS، فقم بتعديل وحدة systemd بالتبعيات المناسبة:
[Unit]
After=network-online.target remote-fs.target
Wants=network-online.target remote-fs.targetتشغيل برنامج نصي طويل أو خدمة دائمة - طريقة أفضل
بالنسبة للمهام طويلة الأمد أو الموجهة نحو الخدمة، من الأفضل إنشاء وحدة systemd مخصصة لاستخدام ميزات مثل إعادة التشغيل والمراقبة:
sudo tee /etc/systemd/system/myjob.service > /dev/null <<'EOF'
[Unit]
Description=My Long Running Job
After=network-online.target
[Service]
Type=simple
User=myuser
ExecStart=/usr/local/bin/my-long-script.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOFsudo systemctl daemon-reload
sudo systemctl enable --now myjob.service
تصحيح الأخطاء الشائعة
- الخدمة في حالة فشل: من
sudo journalctl -u rc-local.service -bاستخدم لعرض السجل. - الأذونات: تأكد من أن الملف قابل للتنفيذ (
chmod +x) والشيء الأساسي موجود في البداية. - المسارات النسبية: استخدم دائمًا المسارات المطلقة للملفات الثنائية.
- المتغيرات البيئية: يحتوي rc.local على بيئة محدودة؛ قم بتعريف متغيرات مثل PATH بشكل صريح أو اكتب المسار الكامل.
- SELinux: تحقق من أخطاء AVC وقم بتعيين السياق.
- التبعيات: إذا كان البرنامج النصي يعتمد على الشبكة أو نظام الملفات، فيجب أن تكون الوحدة بعد= و الرغبات = ينبغي أن يكون مناسباً.
البدائل وأفضل الممارسات
- وحدة systemd مخصصة: إنه الخيار الأفضل للخدمات.
- crontab @reboot: مناسب لمهام المستخدم البسيطة:
@reboot /usr/local/bin/myscript.sh - تهيئة السحابة: مناسب للإعداد الأولي في بيئات الحوسبة السحابية.
- أدوات إدارة التكوين مثل Ansible: يُستخدم لإجراء تغييرات قابلة للتكرار والإدارة.
نصائح أمنية وتشغيلية
من تنفيذ الأوامر الحساسة في rc.local تجنب ذلك. من الأفضل تشغيل البرامج النصية بصلاحيات محددة أو استخدام المستخدم= يُستخدم في نظام systemd.
قم دائمًا بتسجيل مخرجات البرنامج النصي واستخدم صلاحيات محدودة. مثال:/usr/local/bin/myscript.sh >> /var/log/rc.local.log 2>&1
chmod 700 /usr/local/bin/myscript.shبالنسبة لبيئات الإنتاج، قم بالاختبار في بيئة تجريبية قبل تطبيق التغييرات على الخوادم الحيوية.
علاقة هذا التدريب بخدمات الشركة
تتيح لك خدمات شركتنا في أكثر من 85 موقعًا عالميًا، بما في ذلك الخوادم الافتراضية الخاصة، والخوادم السحابية، وخوادم الرسومات (GPU)، والخوادم المخصصة، والشبكات، ما يلي:
- قم بتشغيل برامج بدء التشغيل بسرعة على خوادم VPS الخاصة بالتداول أو الألعاب.
- في خوادم وحدة معالجة الرسومات، استخدم وحدات systemd لبدء الخدمات الثقيلة بحيث تبدأ المعالجة بشكل صحيح بعد إعادة التشغيل.
- على خوادم الشبكة وخوادم مكافحة هجمات DDoS، قم بإنشاء وحدات systemd مخصصة لتشغيل البرامج النصية للشبكة و iptables.
- يتوفر فريق الدعم فيما يتعلق بـ SELinux ومسارات التحميل والتبعيات.
الخاتمة والتوصيات النهائية
على الرغم من نظام systemd، rc.local لا تزال هذه طريقة بسيطة لتشغيل أوامر مخصصة عند بدء التشغيل، ولكن من أجل الاستقرار والمراقبة، من الأفضل استخدام وحدات systemd.
انتبه دائمًا للأذونات، وSELinux، وتوابع الخدمة، واستخدم السجلات لتصحيح الأخطاء.
إذا كانت لديك حاجة محددة (على سبيل المثال، تنفيذ روبوت التداول الآلي، أو إعداد بيئة وحدة معالجة الرسومات، أو تكوين شبكة خادم الألعاب)، فإن فريقنا التقني على استعداد للمساعدة في مواقع مختلفة.









