কীভাবে ব্যবহার করবেন
- সার্ভিসের নাম, পূর্ণ পাথসহ কমান্ড এবং ওয়ার্কিং ডিরেক্টরি দিন।
- ইউজার, রিস্টার্ট নীতি এবং প্রয়োজনীয় এনভায়রনমেন্ট ভেরিয়েবল ঠিক করুন।
- চাইলে প্রাথমিক সুরক্ষা কড়াকড়ি বা টাইমার তৈরির জন্য সময়সূচি (OnCalendar) যোগ করুন।
- তৈরি ফাইলগুলো কপি করুন, অথবা ইনস্টল কমান্ড সার্ভারের 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 সহজ এবং এখনও ভালোই চলে।
গোপনীয়তা
এই টুলটি পুরোপুরি আপনার ব্রাউজারে চলে। আপনার ফাইল ও লেখা আপনার ডিভাইসেই প্রসেস হয় এবং কখনো আমাদের সার্ভারে আপলোড হয় না।