মূল বিষয়বস্তুতে যান
ToolMug

সরাতে ↑ ↓, খুলতে Enter, বন্ধ করতে Esc চাপুন।

systemd সার্ভিস ফাইল জেনারেটর

Linux সার্ভারে Node.js, Python বা Go প্রোগ্রাম চালু রাখুন, বুটের সময় শুরু করুন এবং ক্র্যাশ করলে আবার চালান — systemd-এর প্রতিটি অপশন মনে না রেখেই। কমান্ড ও ইউজার দিন, রিস্টার্ট নীতি ও এনভায়রনমেন্ট ভেরিয়েবল বেছে নিন, তারপর .service ফাইলটি ইনস্টল ও চালু করার কমান্ডসহ কপি করুন। cron-এর আধুনিক বিকল্প হিসেবে .timer পেতে “সময়সূচি অনুযায়ী চালান” টিক দিন।

আপনার ব্রাউজারে চলে — আপনি যা দেন তার কিছুই আপলোড হয় না

এটিই ফাইলের নাম হবে, যেমন myapp → myapp.service

প্রোগ্রামের পূর্ণ পাথ দিন, যেমন /usr/bin/python3 app.py

কমান্ড ফোরগ্রাউন্ডে চলতে থাকে (বেশিরভাগ ওয়েব অ্যাপ ও স্ক্রিপ্ট)।

প্রতি লাইনে একটি KEY=value লিখুন; ফাঁকা জায়গাসহ মান নিজে থেকেই কোটের ভেতরে বসে যায়।

0 দিলে সিস্টেমের ডিফল্ট থাকে।

myapp.service

ইনস্টল ও চালু করুন

কমান্ডগুলো সার্ভারে root হিসেবে পেস্ট করুন। ইউনিট ফাইল বদলানোর পর আবার systemctl daemon-reload চালান। লগ: journalctl -u <name>।

কীভাবে ব্যবহার করবেন

  1. সার্ভিসের নাম, পূর্ণ পাথসহ কমান্ড এবং ওয়ার্কিং ডিরেক্টরি দিন।
  2. ইউজার, রিস্টার্ট নীতি এবং প্রয়োজনীয় এনভায়রনমেন্ট ভেরিয়েবল ঠিক করুন।
  3. চাইলে প্রাথমিক সুরক্ষা কড়াকড়ি বা টাইমার তৈরির জন্য সময়সূচি (OnCalendar) যোগ করুন।
  4. তৈরি ফাইলগুলো কপি করুন, অথবা ইনস্টল কমান্ড সার্ভারের root শেলে পেস্ট করুন।

অপশনগুলোর ব্যাখ্যা

Type
simple সেইসব প্রোগ্রামের জন্য যেগুলো ফোরগ্রাউন্ডে চলতে থাকে; oneshot সেইসব স্ক্রিপ্টের জন্য যেগুলো একবারই চলে, যেমন নির্ধারিত কাজ।
Restart
“ব্যর্থ হলে” সার্ভিস ত্রুটিসহ বন্ধ হলে বা ক্র্যাশ করলে আবার চালু করে; “সবসময়” স্বাভাবিকভাবে বন্ধ হওয়ার পরও আবার চালু করে।
OnCalendar
টাইমার কখন চলবে, যেমন daily বা প্রতিদিন রাত ৩টার জন্য *-*-* 03:00:00। এক্সপ্রেশন systemd-analyze calendar দিয়ে যাচাই করুন।

উদাহরণ: টাইমার হিসেবে রাতের কাজ

প্রতি রাত 3টায় একটি স্ক্রিপ্ট চালাতে Command (ExecStart) /usr/local/bin/backup.sh, সার্ভিসের নাম backup, Type oneshot এবং Restart Never সেট করুন, তারপর «সময়সূচি অনুযায়ী চালান (.timer তৈরি করুন)» ও «প্রাথমিক সুরক্ষা কড়াকড়ি» টিক দিন। ডিফল্ট ব্যবহারকারী ও কাজের ডিরেক্টরিতে জেনারেটর দুটি ফাইল বানায়। backup.service:

[Unit]
Description=Nightly backup

[Service]
Type=oneshot
User=www-data
WorkingDirectory=/srv/myapp
ExecStart=/usr/local/bin/backup.sh
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=read-only

এবং backup.timer:

[Unit]
Description=Run backup on a schedule

[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=backup.service

[Install]
WantedBy=timers.target

টাইমার চালু করলে দুটি বিষয় বদলায়। সার্ভিস ফাইল তার [Install] সেকশন হারায়, কারণ টাইমারই তাকে চালু করে, এবং ইনস্টল কমান্ড সার্ভিসের বদলে টাইমার সক্রিয় করে:

sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
journalctl -u backup.service -f

টাইমার অপশন টিক দিলে Type আপনার জন্য বদলায় না, তাই শেষ হয়ে যায় এমন কাজের জন্য oneshot নিজে বেছে নিন। oneshot সার্ভিসের সঙ্গে Restart Always বৈধ নয়, তাই জেনারেটর Restart বাদ দেয় এবং একটি সতর্কবার্তা দেখায়।

সচরাচর জিজ্ঞাসিত প্রশ্ন

ফাইলটি কোথায় রাখব?

/etc/systemd/system/-এ। তারপর systemctl daemon-reload এবং systemctl enable --now <name>.service চালান — তৈরি কমান্ডগুলো এসবই করে দেয়।

আমার সার্ভিস “Executable path is not absolute” বলে ব্যর্থ হচ্ছে কেন?

পুরনো systemd সংস্করণে ExecStart-এ প্রোগ্রামের পূর্ণ পাথ লাগে। which দিয়ে সেটি খুঁজে নিন, যেমন which node।

টাইমার না cron?

টাইমার জার্নালে লগ রাখে, সার্ভার বন্ধ থাকাকালীন বাদ পড়া রান পরে চালিয়ে নিতে পারে এবং একসঙ্গে দুবার চলে না। এক লাইনের কাজে cron সহজ এবং এখনও ভালোই চলে।

গোপনীয়তা

এই টুলটি পুরোপুরি আপনার ব্রাউজারে চলে। আপনার ফাইল ও লেখা আপনার ডিভাইসেই প্রসেস হয় এবং কখনো আমাদের সার্ভারে আপলোড হয় না।

সম্পর্কিত টুল