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
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
Câu trả lời:
Để 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!
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.
/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.
/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ọ.
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.
Nếu bạn có một cron
daemon, 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 crontab
tệp của bạn và thêm một dòng:
@reboot /your/command/here
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ó.
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
service --status-all
danh sách?