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.jar
và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
.
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.jar
và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
.
Câu trả lời:
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 script
phần thay vì exec
dò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.d
thư 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-start
và pre-stop
/ post-stop
cá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-start
phần.
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!
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 ;-)