Cách tạo một dịch vụ trên Ubuntu Upstart


21

Tôi có một chương trình thực thi Java mà tôi có thể chạy bằng cách gõ java -jar abc.jarvào terminal. Làm thế nào tôi có thể chạy nó như một dịch vụ? Tôi muốn chạy nó như một dịch vụ như bằng cách gõ service abc start.


Một câu trả lời đầy đủ hơn có ở đây: unix.stackexchange.com/questions/1924/ , Về cơ bản, trong Ubuntu, bạn có thể tạo tập lệnh cho /etc/init.d có thể bắt đầu / dừng / khởi động lại dịch vụ của bạn.
Ông Ed

Câu trả lời:


41

Hãy chắc chắn rằng bạn đang ở trên 14.04. Ubuntu 16.04 (trở lên) sử dụng systemd, không phải Upstart.

Tập lệnh Upstart là tập tin tập lệnh được đặt tại /etc/init/và kết thúc bằng .conf.

Nó đòi hỏi 2 phần: một phần để chỉ khi nào bắt đầu và phần khác có lệnh để thực thi.

Kịch bản dễ nhất để bắt đầu với mẫu của bạn là:

# myprogram.conf
start on filesystem
exec /usr/bin/java -jar /path_to/program

Tạo dưới gốc /etc/init/myprogram.conf.

Nếu tập lệnh của bạn yêu cầu nhiều hơn một dòng lệnh, hãy sử dụng scriptphần thay vì execdòng:

# myprogram.conf
start on filesystem
script
    /usr/bin/java -jar /path_to/program
    echo "Another command"
end script

Để bật hoàn thành bash cho dịch vụ của bạn, hãy thêm một liên kết tượng trưng vào /etc/init.dthư mục:

sudo ln -s /etc/init/myprogram.conf /etc/init.d/myprogram

Sau đó thử bắt đầu và dừng nó:

sudo service myprogram start

Theo sách hướng dẫn mới nhất , bạn có thể tạo pre-start/ post-startpre-stop/ post-stopcác lệnh sẽ được thực thi.

Ngoài ra, tôi đọc bạn muốn kiểm tra nếu một quá trình đang chạy. Kiểm tra câu hỏi này và có thể sử dụng pre-startphần.


1
Có lẽ bạn cần làm cho nó thực thi với sudo chmod +x /etc/init.d/myprogram. THẬN TRỌNG: phương pháp trả lời của bạn không hoạt động trong Ubuntu 16.04!
juliocesar

2
@juliocesar 16.04 sử dụng systemd, không phải Upstart.
Rael Gugelmin Cunha

start onkhông phải là một khổ thơ cần thiết. Như bạn có thể đọc ở đây : Công việc như vậy chỉ có thể được kiểm soát bởi Quản trị viên .
SuB

@SuB yeap, nhưng sau đó công việc sẽ không tự động bắt đầu và rõ ràng là tác giả câu hỏi muốn một cái gì đó hoạt động như một dịch vụ, tức là bắt đầu tự động.
Rael Gugelmin Cunha

Vâng Tôi biết. chỉ cần thêm một bình luận để hoàn thành câu trả lời của bạn.
SuB

0

Bạn cần tạo ra một sự khởi đầu. http://upstart.ubfox.com/getting-started.html

Upstart là (IMHO) một thảm họa so với các tập lệnh init SysV tốt. Upstart là FAR nỗ lực nhiều hơn với ít công việc phụ. Như đã nói, tôi nghi ngờ sẽ có một vài người bảo vệ mới nổi ngoài kia sẽ đưa tôi đến nhiệm vụ cho tôi nói rõ ràng ;-)


1
Đây chỉ là một tệp trong /etc/init/yourservice.conf với một dòng cho biết khi nào bắt đầu và một tệp khác cho lệnh exec. Fedora sử dụng mới bắt đầu quá. Ngoài ra, ngay cả Debian cũng đang thay đổi lược đồ bắt đầu của nó thành SystemD, đây sẽ là lược đồ Ubuntu trong tương lai.
Rael Gugelmin Cunha
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.