nohup در لینوکس به پروسهها اجازه میدهد حتی پس از خروج کاربر یا پایان جلسه ترمینال به کار خود ادامه دهند.
این کار با هدایت خروجی استاندارد و خطا به یک فایل مشخص (که به طور پیشفرض “nohup.out” است) یا به دستگاه null (در صورت عدم تعیین) انجام میشود.
این ویژگی از خاتمه پروسه هنگام پایان جلسه جلوگیری میکند و برای وظایف طولانیمدت یا پروسههایی که نیاز به اجرا مستقل از جلسه فعال کاربر دارند، مفید است.
نحو فرمان nohup در لینوکس:
nohup command [arg1 arg2 ...] [options]
پیشنیازها برای استفاده از فرمان nohup در لینوکس:
– یک VPS لینوکسی با توزیع سازگار (مانند اوبونتو، دبیان، سنتاواس).
– یک کاربر غیر ریشهای با مجوزهای sudo.
– دسترسی به ترمینال/خط فرمان.
مثالهای عملی برای درک فرمان nohup در لینوکس:
1. اجرا یک پروسه با nohup:
nohup command
- مثال:
nohup ping google.com
این فرمان یک پینگ مداوم به سرور گوگل را با استفاده از nohup اجرا میکند و خروجی در فایل nohup.out ذخیره میشود. میتوانید خروجی را با:
cat nohup.out
بررسی کنید.
2. اجرا یک پروسه در پسزمینه:
– در لینوکس، اجرای یک پروسه در پسزمینه اجازه میدهد تا آن به طور مستقل از ترمینال یا جلسه کاربر ادامه یابد.
– نحو:
nohup command &
nohup ls -l &
این فرمان ls -l را در پسزمینه اجرا میکند.
اجرای دستورات در پسزمینه با دستور nohup در لینوکس
دستور nohup مخفف عبارت “no hang up” به معنای “قطع نشدن” است. این دستور به شما امکان میدهد دستورات و اسکریپتهای پوسته را اجرا کنید، به گونهای که حتی پس از خروج از ترمینال یا قطع شدن اتصال، همچنان به کار خود ادامه دهند.
۲- هدایت خروجی به یک فایل خاص
در این مثال، دستور nohup خروجی استاندارد و خطای استاندارد را در یک فایل log مشخص ذخیره میکند.
نحوه نوشتن دستور:
nohup دستور > فایل_خروجی 2>&1 &
مثال:
nohup ./opera_script.sh > script.log 2>&1 &
این دستور خروجی اسکریپت opera_script.sh را به فایل script.log هدایت میکند.
۳- اجرای اسکریپت پایتون با nohup
دستور nohup در لینوکس برای اجرای اسکریپتهای پایتونی که اجرای آنها زمان زیادی میبرد، مفید است.
نحوه نوشتن دستور:
nohup python3 script.py > output.log 2>&1 &
مثال:
nohup python3 data_processing.py > process.log 2>&1 &
اسکریپت data_processing.py در پسزمینه اجرا میشود و خروجی آن در فایل process.log ذخیره میشود.
۴- اجرای اسکریپت پوسته با nohup
یکی دیگر از کاربردهای دستور nohup در لینوکس، اطمینان از توقف نشدن اسکریپتهای پوسته با اجرای طولانی پس از خروج از کاربر است.
نحوه نوشتن دستور:
nohup ./script.sh > output_file 2>&1 &
مثال:
nohup ./backup.sh > backup.log 2>&1 &
این دستور اسکریپت backup.sh را اجرا میکند و خروجی آن را در فایل backup.log ثبت میکند.
۵- اجرای یک فرآیند بدون هدایت خروجی
با استفاده از این مثال، میتوانید در صورتی که به ذخیره کردن خروجی اهمیت نمیده دهید، آن را دور بریزید.
نحوه نوشتن دستور:
nohup دستور > /dev/null 2>&1 &
مثال:
nohup ./operaserver.sh > /dev/null 2>&1 &
در اینجا خروجی و خطاهای اسکریپت operaserver.sh دور ریخته میشوند.
۶- مشاهده خروجی nohup به صورت لحظهای
برای مشاهده فایل خروجی ایجاد شده توسط nohup به صورت لحظهای میتوانید از دستور tail استفاده کنید.
نحوه نوشتن دستور:
tail -f فایل_خروجی
مثال:
tail -f nohup.out
این دستور خروجی در حال انجام از دستور nohup را در فایل nohup.out نمایش میدهد.
۷- اجرای چندین دستور با nohup
میتوانید از دستور nohup برای اجرای چندین دستور به صورت متوالی استفاده کنید تا اطمینان حاصل کنید که آنها همچنان به کار خود ادامه میدهند.
نحوه نوشتن دستور:
nohup sh -c 'دستور1 && دستور2' > فایل_خروجی 2>&1 &
مثال:
nohup sh -c './task1.sh && ./task2.sh' > tasks.log 2>&1 &
این دستور ابتدا اسکریپت task1.sh و سپس task2.sh را اجرا میکند و خروجی آنها را در فایل tasks.log ثبت میکند.
اجرای دستورات در پسزمینه با تنظیم اولویت دلخواه با nohup
میتوانید از nohup به همراه nice برای تنظیم اولویت فرآیند استفاده کنید.
نحوه نوشتن دستور:
nohup nice -n priority دستور > فایل_خروجی 2>&1 &
مثال:
nohup nice -n 10 ./heavy_task.sh > heavy_task.log 2>&1 &
این دستور اسکریپت heavy_task.sh را با اولویت پایینتری اجرا میکند و خروجی آن را در فایل heavy_task.log ثبت میکند.
استفاده از nohup با SCP برای انتقال فایل
با استفاده از دستور nohup میتوانید اطمینان حاصل کنید که انتقال فایل از طریق SCP حتی در صورت قطع شدن ارتباط، همچنان ادامه یابد.
نحوه نوشتن دستور:
nohup scp فایل_منبع user@سرور_مقصد:/مسیر_مقصد > scp.log 2>&1 &
مثال:
nohup scp file.txt user@192.168.1.10:/home/user/ > scp_transfer.log 2>&1 &
این دستور فایل file.txt را به یک سرور از راه دور منتقل میکند و خروجی آن در فایل scp_transfer.log ذخیره میشود.
اجرای یک دستور به صورت دورهای با nohup و watch
این مثال نحوه اجرای یک دستور در فواصل زمانی معین در پسزمینه با استفاده از watch به همراه nohup را توضیح میدهد.
نحوه نوشتن دستور:
nohup watch -n فاصله_زمانی دستور > فایل_خروجی 2>&1 &
مثال:
nohup watch -n 60 ./check_status.sh > status.log 2>&1 &
این دستور هر ۶۰ ثانیه یک بار اسکریپت check_status.sh را اجرا میکند و خروجی آن را در فایل status.log ثبت میکند.
نحوه استفاده از دستور nohup برای توقف یک فرآیند
در حالی که اغلب از دستور nohup برای اجرای فرآیندهای با اجرای طولانی در پسزمینه استفاده میشود، میتوانید از آن برای توقف یا کشتن این فرآیندها نیز استفاده کنید.
از آنجایی که فرآیند به طور مستقل از ترمینال اجرا میشود، نمیتوانید فقط از کلیدهای ترکیبی معمول Ctrl + C برای متوقف کردن آن استفاده کنید. در عوض، باید فرآیند را شناسایی کرده و با استفاده از دستور kill آن را متوقف کنید.
برای توقف یک فرآیند راهاندازی شده با nohup مراحل زیر را دنبال کنید:
-
شناسایی شناسه فرآیند (PID): شناسه فرآیند (PID) فرآیندی که میخواهید متوقف کنید را پیدا کنید. میتوانید این کار را با استفاده از دستور
psیاpgrepبرای جستجوی فرآیند با نام آن انجام دهید. -
توقف فرآیند با PID: پس از به دست آوردن PID، از دستور
killبرای متوقف کردن آن استفاده کنید.
نحوه پیدا کردن فرآیند:
- برای یافتن فرآیند از دستور زیر استفاده کنید:
ps aux | grep نام_دستور
یا
pgrep نام_دستور
- برای توقف فرآیند، دستور زیر را اجرا کنید:
kill PID
توجه: اگر فرآیند با یک دستور kill ساده متوقف نشد، از پرچم -9 برای توقف اجباری آن استفاده کنید:
kill -9 PID
مثال:
فرض کنید یک اسکریپت پایتون با اجرای طولانی را با استفاده از nohup راهاندازی کردهاید:
nohup python3 my_script.py > output.log 2>&1 &
برای توقف این فرآیند، PID را با استفاده از دستور زیر پیدا کنید:
ps aux | grep my_script.py
این دستور خروجی مشابهی با موارد زیر خواهد داشت:
user 12345 0.5 2.0 python3 opera_script.py
برای توقف فرآیند، از دستور kill همراه با PID استفاده کنید:
kill 12345
نتیجهگیری
در طول این راهنما، مثالهای عملی استفاده از nohup برای اجرای دستورات در پسزمینه، هدایت خروجی به فایلها، مدیریت وظایف چندگانه و اطمینان از اجرای بدون وقفه را بررسی کردیم.
چه در حال اجرای اسکریپتهای پایتون، انتقال فایلها یا مدیریت وظایف پیچیده باشید، nohup یک روش ساده اما مؤثر برای ادامه اجرای فرآیندهای شما به طور مستقل از ترمینال شما ارائه میدهد.
دستور nohup در لینوکس برای وظایف با اجرای طولانی مانند پشتیبانگیری، اسکریپتها یا پردازش دادهها بسیار مناسب است.
