2011-11-17 55 views
11

Tôi có lệnh Shell mà tôi muốn chạy trong nền và tôi đã đọc rằng điều này có thể được thực hiện bằng cách kết hợp một số & với lệnh khiến nó chạy một quá trình nền nhưng tôi cần thêm một số chức năng và đã tự hỏi cách xử lý:Chạy lệnh dưới dạng quy trình/dịch vụ nền

  1. Tôi muốn lệnh bắt đầu và chạy ở chế độ nền mỗi khi hệ thống khởi động lại.
  2. Tôi muốn có thể bắt đầu và dừng và khi cần thiết giống như người ta có thể làm service apache2 start.

Tôi làm cách nào để thực hiện việc này? Có một công cụ cho phép tôi chạy một lệnh như một dịch vụ không?

Tôi hơi lạc mất với điều này.

Cảm ơn

+0

FYI, một Unix "dịch vụ" này thường được gọi là [daemon] (http://en.wikipedia.org/wiki/Daemo n_% 28computing% 29) - biết điều này có thể giúp bạn tìm thông tin dễ dàng hơn. – Sorpigal

Trả lời

20

Hãy xem lệnh daemon, có thể biến các quy trình tùy ý thành daemon. Điều này sẽ cho phép kịch bản của bạn hoạt động như một daemon mà không yêu cầu bạn phải làm nhiều công việc phụ. Bước tiếp theo là gọi nó tự động khi khởi động. Để biết cách chính xác để làm điều đó, bạn sẽ cần phải cung cấp hệ điều hành của bạn (hoặc, cho Linux, phân phối của bạn).

+0

Chúc mừng Sorpigal. Điều đó đã giúp. –

+0

Hi Sorpigal. Tôi biết tôi đã chấp nhận câu trả lời này nhưng bạn có thể nói làm thế nào tôi có thể nhận được daemon để bắt đầu khởi động. Tôi đang ở trên Ubuntu 10.4. Cảm ơn. –

+1

@MridangAgarwalla: Tôi không quen thuộc với hệ thống init mới của Ubuntu, nhưng [thử tại đây] (https://help.ubuntu.com/community/UbuntuBootupHowto) và trong phần Viết Dịch vụ, hãy đặt lệnh gọi daemon của bạn nơi nó nói ' echo "Đặt mã bash ở đây" – Sorpigal

20

hệ thống UNIX có thể xử lý như nhiều quá trình như bạn cần đồng thời (chỉ cần mở cửa sổ shell mới nếu bạn đang ở trong một giao diện đồ họa), do đó chạy một quá trình trong nền chỉ cần thiết nếu bạn cần phải thực hiện về việc sử dụng cửa sổ trình bao hiện tại cho những thứ khác khi bạn đã chạy một ứng dụng hoặc quá trình tiếp tục chạy.

Để chạy một lệnh gọi lệnh trong chế độ nền, bạn muốn sử dụng:

command & 

Đây là một nhân vật đặc biệt mà chuyển bạn về dấu nhắc lệnh một lần quá trình này được bắt đầu. Có những nhân vật đặc biệt khác làm những việc khác, nhiều thông tin hơn có sẵn here.

+7

Lợi thế của việc sử dụng giải pháp của Sorgigal là bạn có thể đóng quá trình terminal/shell và quá trình này sẽ tiếp tục chạy. Đây không phải là trường hợp sử dụng &, vì quá trình này vẫn gắn liền với quá trình shell cụ thể và thoát ra nếu quá trình shell thực hiện. – metasoarous

+2

Để giữ cho 'lệnh' chạy sau khi đóng shell, sử dụng lệnh' nohup & ' – rem

1

Để kiểm soát công việc nâng cao bằng bash, bạn nên xem xét các lệnh jobsbgfg.

Tuy nhiên, có vẻ như bạn không thực sự quan tâm đến việc chạy lệnh trong nền. Những gì bạn muốn làm là khởi chạy lệnh khi khởi động. Cách để thực hiện việc này thay đổi tùy thuộc vào hệ thống Unix bạn sử dụng, nhưng hãy thử tìm trong họ tập tin rc (ví dụ: /etc/rc.local ví dụ trên Ubuntu). Chúng chứa các script sẽ được thực hiện sau init script.

+0

Tôi biết rằng đây không phải là giải pháp cho OP, nhưng nếu ai đó trả lời bằng câu trả lời này, bạn sẽ biết rằng bạn có thể" loại bỏ "công việc và chúng sẽ tiếp tục chạy ở chế độ nền ngay cả sau khi hệ vỏ thoát. –

3

Dựa trên bài viết này:
http://felixmilea.com/2014/12/running-bash-commands-background-properly/

... một cách khác tốt là với screen ví dụ:

screen -d -m -s "my session name" <command to run> 

từ screen manual: màn hình

-d -m
Start trong chế độ tách rời. Điều này tạo ra một phiên mới nhưng không đính kèm nó. Điều này rất hữu ích cho các kịch bản khởi động hệ thống.

tức là bạn có thể đóng terminal của bạn, quá trình này sẽ tiếp tục chạy (không giống với &)

với screen bạn cũng có thể lắp lại để phiên sau

0

Sử dụng nohup khi hướng đầu ra đến/dev/null

nohup command &>/dev/null &

Các vấn đề liên quan