Bắt đầu tomcat khi khởi động với đặc quyền quản trị


23

Tôi cần một quá trình chạy trước khi đăng nhập vào hệ thống. Làm thế nào để chạy nó như dịch vụ? Làm cách nào để tạo dịch vụ trong Linux?

Trong Ubuntu và Fedora? Dịch vụ này được tùy chỉnh tomcat


6
Làm thế nào các dịch vụ khởi động là rất có điều kiện trên bản phân phối Linux. Vui lòng cho chúng tôi biết những gì bạn đang cố gắng thực hiện (và trên bản phân phối nào và có thể là Môi trường máy tính để bàn), bởi vì ngay bây giờ tôi nghĩ có lẽ bạn không nghĩ về vấn đề này ngay.
xenoterracide

Câu trả lời:


23

Để chạy một dịch vụ mà không có hoặc trước khi đăng nhập vào hệ thống (tức là "khi khởi động"), bạn sẽ cần tạo một tập lệnh khởi động và thêm nó vào chuỗi khởi động.
Có ba phần trong tập lệnh dịch vụ: bắt đầu, dừng và khởi động lại.
Cấu trúc cơ bản của tập lệnh dịch vụ là:

#!/bin/bash
#
RETVAL=0;

start() {
echo “Starting <Service>”
}

stop() {
echo “Stopping <Service>”
}

restart() {
stop
start
}

case “$1″ in
start)
  start
;;
stop)
  stop
;;
restart)
  restart
;;
*)

echo $”Usage: $0 {start|stop|restart}”
exit 1
esac

exit $RETVAL  

Khi bạn đã điều chỉnh tập lệnh theo ý thích của mình, chỉ cần đặt tập lệnh vào /etc/init.d/
Và thêm nó vào quy trình khởi động dịch vụ hệ thống (trên Fedora, tôi không phải là người dùng Ubuntu,> D):

chkconfig -add <ServiceName>  

Dịch vụ sẽ được thêm vào quá trình khởi động hệ thống và bạn sẽ không phải tự khởi động lại.

Chúc mừng!


2
Lưu ý rằng trong khi bắt đầu, dừng và khởi động lại thường là đủ cho các tập lệnh init đơn giản. Bạn cũng có thể muốn bao gồm một hành động 'trạng thái', dễ dàng trong Debian và các bản phân phối khác bao gồm status_of_proc () trong gói chức năng init của nó. Các gói được quản lý tốt sẽ bao gồm tất cả các chức năng theo yêu cầu của LSB ( refspecs.freest Standards.org/LSB_3.1.0/LSB-Core-generic/ .). Tập lệnh init được phân phối với tomcat trong Ubuntu chứa tất cả các hành động này, có lẽ đặt cược là chỉ sử dụng nó.
Steven D

19

Tùy thuộc vào hệ thống init, bạn tạo init script khác nhau. Fedora cung cấp cho bạn sự khởi đầu và hệ thống để lựa chọn, và tất nhiên là khả năng tương thích SysV.

Mới bắt đầu

  • tạo tập tin định nghĩa dịch vụ như /etc/init/custom-tomcat.conf
  • đặt vào trong:

    start on stopped rc RUNLEVEL=3
    respawn
    exec /path/to/your/tomcat --and --parameters
    

Và Tomcat của bạn nên bắt đầu trên hệ thống bắt đầu.

Hệ thống

  • tạo định nghĩa dịch vụ trong /etc/systemd/system/custom-tomcat.service
  • đặt vào trong:

    [Service]
    ExecStart=/path/to/your/tomcat --and --parameters
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

và cho phép dịch vụ của bạn sử dụng systemctl enable custom-tomcat.service. Nó sẽ được bắt đầu mỗi khi khởi động bình thường.

Tất nhiên có một vài tùy chọn cấu hình cho cả hai hệ thống init, bạn có thể kiểm tra những tùy chọn trong tài liệu của họ.


7

Tomcat là một dịch vụ khá phổ biến, tôi khuyên bạn nên xem tập lệnh init được cung cấp bởi bản phân phối. Rất có thể nó hoạt động với nhị phân tùy chỉnh của bạn, với rất ít hoặc không điều chỉnh.


6

Nếu bạn có một crondaemon, một trong những móc thời gian cron được xác định trước là @reboot, nó sẽ tự nhiên chạy khi hệ thống khởi động. Chạy crontab -eđể chỉnh sửa crontabtệp của bạn và thêm một dòng:

@reboot /your/command/here

Điều này áp dụng cho tất cả các phần khởi động, hay chỉ khởi động lại?
WhyNotHugo

Nó chỉ áp dụng cho fcron - không phải vixie-cron hoặc bất kỳ cron AFAIK nào khác.
Maciej Piechotka

@Maciej Nó chắc chắn hoạt động cho vixie-cron; đó là những gì tôi sử dụng
Michael Mrozek

@Hugo Tất cả các phần khởi động
Michael Mrozek

6

Để đơn giản chạy tập lệnh sau khi máy tính khởi động nhưng trước khi người dùng đăng nhập, bạn chỉ cần chỉnh sửa tập lệnh /etc/rc.local để giải quyết chính xác nhiệm vụ này.


3

Bạn có thể tạo một tập lệnh tinh vi hơn, cho phép bạn chạy theo các quyền cụ thể của người dùng, như sau:

#!/bin/sh
NAME=myservice
DESC="My Service"
USERGROUP="myservice:myservice"

#Helper functions
start() {
        start-stop-daemon --start --quiet --background --make-pidfile \
                --pidfile /var/run/$NAME.pid --chuid $USERGROUP \
                --exec /usr/local/bin/myservice
}

stop() {
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
                --exec myservice --retry 30
}

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        stop
        echo "$NAME."
        ;;
  restart)
        echo -n "Restarting $DESC: "
        #set +e
        stop
        #set -e
        #sleep 1
        start

        echo "$NAME."
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart}" >&2
        exit 1
        ;;
esac

exit 0

Tập lệnh đi vào /etc/init.d/myservice và bạn bắt đầu dịch vụ bằng cách thực thi:

/etc/init.d/myservice start

Đọc trang man trên start-stop-daemon để hiểu cách thức hoạt động của nó.


1

Trong Ubuntu hoặc Debian như bạn có thể sử dụng, để thêm

update-rc.d your_service defaults

để loại bỏ

update-rc.d -f your_service remove

Tạm biệt! \ o

thật tuyệt khi thực hiện trạng thái chức năng và buộc tải lại thành trình biên dịch LSB


Làm thế nào để làm daemon của tôi xuất hiện trong service --status-alldanh sách?
Necktwi
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.