۰
(۰)

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 مراحل زیر را دنبال کنید:

  1. شناسایی شناسه فرآیند (PID): شناسه فرآیند (PID) فرآیندی که می‌خواهید متوقف کنید را پیدا کنید. می‌توانید این کار را با استفاده از دستور ps یا pgrep برای جستجوی فرآیند با نام آن انجام دهید.

  2. توقف فرآیند با 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 در لینوکس برای وظایف با اجرای طولانی مانند پشتیبان‌گیری، اسکریپت‌ها یا پردازش داده‌ها بسیار مناسب است.

چقدر این مطلب مفید بود؟

روی یک ستاره کلیک کنید تا به آن امتیاز دهید!

میانگین امتیاز ۰ / ۵. تعداد آرا: ۰

تا الان رای نیامده! اولین نفری باشید که به این پست امتیاز می دهید.