Tôi đã xây dựng một daemon nhỏ trong Java và tôi muốn chạy nó dưới dạng dịch vụ trong Unix (ví dụ: Debian 5). Tôi đã đọc rằng có khả năng sử dụng trình bao bọc Java, nhưng không có tùy chọn nào khác dễ thực hiện hơn? Tôi không thể sử dụng lệnh Unix như xxx java -jar program.jar
?Java đang chạy dưới dạng dịch vụ Unix
Trả lời
Vâng, nếu bạn muốn chạy chương trình java của bạn ngay cả khi bạn thoát ra khỏi vỏ bọc của mình, sau đây là cách đơn giản nhất :
$nohup java -jar program.jar &
xem xét chuyển hướng stderr và stdout như một phần của lệnh. ví dụ. 'nohup java .... 1>/dev/null 2> & 1 &' – JeremyP
Bạn có thể sử dụng lệnh cron để lên lịch chương trình của mình. Bạn cũng có thể xem bài viết this để biết chi tiết về cách chạy tập lệnh khi khởi động. Bạn có thể viết một kịch bản chạy chương trình java của bạn và chạy nó khi khởi động như đã đề cập trong bài viết.
Điều này là tốt nếu bạn muốn chạy chương trình định kỳ. Chương trình sau đó sẽ chấm dứt khi thực hiện xong. – KarlP
Bài viết này chứa một vài thủ thuật hữu ích để chạy một ứng dụng Java như một daemon:
http://barelyenough.org/blog/2005/03/java-daemon/
Ngoài ra, bạn có thể có một cái nhìn tại các dự án Apache Commons Daemon, mặc dù điều này đòi hỏi phải có mã gốc (Unix và Win32 hỗ trợ):
Bạn có thể bắt đầu nó như:
java -jar program.jar
Các daemon Unix thường bắt đầu bằng init hoặc được bắt đầu bằng tập lệnh trong /etc/init.d
hoặc /etc/rc.d
và bắt đầu tại runlevel cụ thể - thường bằng liên kết mềm trong /etc/rcX.d
. (trong đó X là "runlevel" dự kiến thường là 3.
Tôi nghĩ rằng debian đang chuyển sang sử dụng "khởi động", thay thế init. Nó sử dụng các tệp cấu hình trong /etc/init
để xác định công việc và chúng khá dễ dàng
Daemons theo truyền thống đóng stdin, sdtout và stderr, và thực hiện "ngã ba kép" khi bắt đầu, để tách khỏi phiên và cũng để báo hiệu rằng họ sẵn sàng xử lý mọi thứ họ nên xử lý Điều này là không thực sự cần thiết, miễn là daemon không được bắt đầu từ thiết bị đầu cuối
Nếu bạn muốn một trình bao bọc đơn giản để bắt đầu chương trình, bạn chỉ cần viết một vỏ nhỏ cript:
#!/bin/sh
/full/path/to/java -jar /full/path/to/program.jar
... và làm cho nó thực thi (chmod 755)
Bạn cần tạo tập lệnh thích hợp trong /etc/init.d
và liên kết nó với /etc/rcX.d
thư mục. Tập lệnh phải hỗ trợ ít nhất các thông số start
, stop
và status
. Trong khi bắt đầu, nó sẽ chạy lệnh java
với các đối số thích hợp, có thể thông qua nohup java <arguments> &
. Sau đó, bạn nên lưu PID của quá trình mới bắt đầu của bạn để nộp /var/run/yourservice.pid
. stop
lệnh nên đọc tập tin PID này và giết dịch vụ này. Các chi tiết khác nhau từ phân phối đến phân phối, hầu hết các bản phân phối cung cấp một số macro để làm cho toàn bộ công việc dễ dàng hơn. Tốt nhất là xem ví dụ về các dịch vụ khác trong /etc/init.d
để phân phối của bạn.
Ngoài ra: Nếu dịch vụ của bạn không được truy cập từ các máy tính khác từ mạng, nhưng nó sẽ mở một số cổng, hãy làm cho nó không khả dụng với tường lửa.
Nếu dịch vụ của bạn xử lý một số dữ liệu 'tinh tế', bạn nên thêm một người dùng khác và gọi lệnh sudo
thích hợp trong tệp /etc/init.d
của mình.
Trên Debian, có một kịch bản được tạo sẵn, bạn có thể sao chép và điều chỉnh theo nhu cầu của mình: '/ etc/init.d/skeleton' – barjak
Trên máy tính Linux có một lệnh tiện ích, 'chkconfig', tạo ra các liên kết trong thư mục'/etc/rcX' cho bạn bằng cách kiểm tra các chú thích định dạng đặc biệt trong kịch bản lệnh của bạn. – Raedwald
- 1. nút giám sát đang chạy dưới dạng dịch vụ
- 2. Log4Net với WCF đang chạy dưới dạng dịch vụ
- 3. Chạy quy trình Java dưới dạng Dịch vụ trong Linux
- 4. Chạy Jetty 7 dưới dạng Dịch vụ Windows
- 5. Chương trình Java dưới dạng dịch vụ cửa sổ
- 6. chạy Tìm kiếm Đàn hồi dưới dạng dịch vụ Windows
- 7. Chạy tập lệnh python dưới dạng dịch vụ cửa sổ
- 8. Chạy lệnh dưới dạng quy trình/dịch vụ nền
- 9. Chạy Java dưới dạng ứng dụng web
- 10. Cách ngừng dịch vụ đang chạy?
- 11. Powershell - Tạo tác vụ theo lịch để chạy dưới dạng hệ thống/dịch vụ cục bộ
- 12. Dấu nhắc lệnh tương tác dưới dạng MẠNG DỊCH VỤ
- 13. Ứng dụng C++ OpenGL dưới dạng dịch vụ web
- 14. Dịch vụ Android đang chạy nhưng không hiển thị trong cài đặt -> dịch vụ đang chạy
- 15. Phương pháp tốt nhất để chạy ứng dụng Java dưới dạng * nix Daemon hoặc Dịch vụ Windows?
- 16. Powershell đang chạy dưới một dịch vụ bị treo trên * .zip CopyHere
- 17. máy chủ http node.js http dưới dạng dịch vụ Windows
- 18. Đăng ký và chạy PostgreSQL 9.0 dưới dạng Dịch vụ Windows
- 19. Máy chủ XML-RPC Python dưới dạng dịch vụ Windows
- 20. Làm cách nào để chạy tệp java .jar dưới dạng dịch vụ cửa sổ trên máy chủ Windows 2008?
- 21. Ưu điểm của việc chạy ứng dụng dưới dạng dịch vụ
- 22. C# - làm cách nào để ứng dụng chạy dưới dạng dịch vụ?
- 23. Cách tạo Dịch vụ nghe C# cho MSMQ dưới dạng dịch vụ Windows
- 24. Xuất các thành phần Spring dưới dạng dịch vụ OSGi
- 25. Lớp dịch vụ ứng dụng dưới dạng lớp tĩnh
- 26. Cài đặt chương trình java dưới dạng dịch vụ cửa sổ: Thay thế cho JavaService?
- 27. Chạy Android 'dịch vụ' dài
- 28. Android: Chuyển các biến đến một dịch vụ đang chạy
- 29. Làm cách nào để tham khảo dịch vụ đang chạy?
- 30. Máy ảnh Android - Đang chạy ẩn từ dịch vụ
http://commons.apache.org/daemon/jsvc.html –
Kiểm tra trong serverfault.com/superuser.com. Hệ thống có thể sẽ biết thêm về điều này (nohup, inittabs, cron, v.v.) – Jayan