nohup در لینوکس به پروسهها اجازه میدهد حتی پس از خروج کاربر یا پایان جلسه ترمینال به کار خود ادامه دهند.
این کار با هدایت خروجی استاندارد و خطا به یک فایل مشخص (که به طور پیشفرض “nohup.out” است) یا به دستگاه null (در صورت عدم تعیین) انجام میشود.
این ویژگی از خاتمه پروسه هنگام پایان جلسه جلوگیری میکند و برای وظایف طولانیمدت یا پروسههایی که نیاز به اجرا مستقل از جلسه فعال کاربر دارند، مفید است.
نحو فرمان nohup در لینوکس:
nohup command [arg1 arg2 ...] [options]
پیشنیازها برای استفاده از فرمان nohup در لینوکس:
– یک VPS لینوکسی با توزیع سازگار (مانند اوبونتو، دبیان، سنتاواس).
– یک کاربر غیر ریشهای با مجوزهای sudo.
– دسترسی به ترمینال/خط فرمان.
مثالهای عملی برای درک فرمان nohup در لینوکس:
۱. اجرا یک پروسه با nohup:
nohup command
- مثال:
nohup ping google.com
این فرمان یک پینگ مداوم به سرور گوگل را با استفاده از nohup اجرا میکند و خروجی در فایل nohup.out ذخیره میشود. میتوانید خروجی را با:
cat nohup.out
بررسی کنید.
۲. اجرا یک پروسه در پسزمینه:
– در لینوکس، اجرای یک پروسه در پسزمینه اجازه میدهد تا آن به طور مستقل از ترمینال یا جلسه کاربر ادامه یابد.
– نحو:
nohup command &
nohup ls -l &
این فرمان ls -l را در پسزمینه اجرا میکند.
اجرای دستورات در پسزمینه با دستور nohup در لینوکس
دستور nohup
مخفف عبارت “no hang up” به معنای “قطع نشدن” است. این دستور به شما امکان میدهد دستورات و اسکریپتهای پوسته را اجرا کنید، به گونهای که حتی پس از خروج از ترمینال یا قطع شدن اتصال، همچنان به کار خود ادامه دهند.
۲- هدایت خروجی به یک فایل خاص
در این مثال، دستور nohup
خروجی استاندارد و خطای استاندارد را در یک فایل log مشخص ذخیره میکند.
نحوه نوشتن دستور:
nohup دستور > فایل_خروجی ۲>&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 &
مثال:
nohup sh -c './task1.sh && ./task2.sh' > tasks.log 2>&1 &
این دستور ابتدا اسکریپت task1.sh
و سپس task2.sh
را اجرا میکند و خروجی آنها را در فایل tasks.log
ثبت میکند.
اجرای دستورات در پسزمینه با تنظیم اولویت دلخواه با nohup
میتوانید از nohup
به همراه nice
برای تنظیم اولویت فرآیند استفاده کنید.
نحوه نوشتن دستور:
nohup nice -n priority دستور > فایل_خروجی ۲>&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 فاصله_زمانی دستور > فایل_خروجی ۲>&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
ساده متوقف نشد، از پرچم -۹
برای توقف اجباری آن استفاده کنید:
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
در لینوکس برای وظایف با اجرای طولانی مانند پشتیبانگیری، اسکریپتها یا پردازش دادهها بسیار مناسب است.