ایپ کو & یا nohup سے چلانا ٹھیک ہے — یہاں تک کہ سرور ری بوٹ ہو، پروسیس کریش کرے، یا آپ اس کے لاگ ڈھونڈنا چاہیں — تب یہ بکھر جاتا ہے۔ systemd معیاری جواب ہے: یہ آپ کی ایپ بوٹ پر شروع کرتا ہے، مرنے پر دوبارہ چلاتا ہے، اور اس کے لاگ پکڑتا ہے۔ کسی اسکرپٹ یا بائنری کو منظم سروس میں بدلنا ایک چھوٹی فائل ہے۔
1. ایک یونٹ فائل لکھیں
/etc/systemd/system/myapp.service بنائیں:
[Unit]
Description=My application
After=network.target
[Service]
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/run.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
ExecStart، WorkingDirectory اور User کو اپنی ایپ کے مطابق ایڈجسٹ کریں۔ Restart=always ہی وہ چیز ہے جو اسے زندہ رکھتی ہے۔
2. ایک مخصوص صارف بنائیں (تجویز کردہ)
sudo useradd --system --no-create-home --shell /usr/sbin/nologin myapp
sudo chown -R myapp:myapp /opt/myapp
غیر روٹ صارف کے طور پر چلانا، اگر ایپ کبھی سمجھوتہ ہو جائے تو نقصان کو محدود کرتا ہے۔
3. اسے فعال کریں اور شروع کریں
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
enable اسے بوٹ پر شروع کراتا ہے؛ --now اسے فوراً شروع کرتا ہے۔
4. حالت اور لاگ دیکھیں
sudo systemctl status myapp
journalctl -u myapp -f # براہِ راست لاگ کی پیروی کریں
روزمرہ کے کمانڈز
sudo systemctl restart myapp # تبدیلی کے بعد دوبارہ چلائیں
sudo systemctl stop myapp # اسے روکیں
sudo systemctl disable myapp # بوٹ پر شروع ہونا بند کریں
ایماندارانہ انتباہ
- یونٹ فائل ترمیم کرنے کے بعد
daemon-reloadچلائیں، ورنہ systemd پرانا نسخہ استعمال کرتا ہے۔ - کریش لوپس سے ہوشیار رہیں۔ اگر ایپ فوراً ناکام ہو، تو
Restart=alwaysہمیشہ کے لیے دوبارہ کوشش کرتا ہے —RestartSec=5کوششوں میں وقفہ دیتا ہے؛ لاگ کے ذریعے بنیادی خرابی درست کریں۔ - غیر روٹ
User=کو ترجیح دیں تاکہ سمجھوتہ شدہ ایپ پورے سرور کی مالک نہ بنے۔
اگلے قدم
systemd سروس وہی ہے جس سے آپ کسی بھی چیز کو 24/7 چلتا رکھتے ہیں — مثلاً چوبیس گھنٹے چلنے والا ایک AI ایجنٹ یا سیلف ہوسٹڈ RustDesk سرور کے پیچھے کا ریلے۔ اگر آپ کی ایپ اس کے بجائے کنٹینرائزڈ ہے، تو Docker کا --restart unless-stopped وہی کردار ادا کرتا ہے — دیکھیں Docker کیسے انسٹال کریں۔
تبصرے
ابھی کوئی تبصرہ نہیں۔ پہلے بنیں۔