Tự tạo một init script đơn giản
System
17
Male avatar

manhdung viết ngày 27/05/2015

Trong khuôn khổ bài viết này, tôi sẽ tạo mẫu một init script cho một service đơn giản.
Service này sẽ tạo một tcp socket lắng nghe trên port 8888.

Tôi sử dụng netcat để tạo ra một socket như vầy:
nc -l 8888

Giờ tôi sẽ điều khiển service này qua một init script
Service này tôi gọi đơn giản là network_example

Khi start service thành công thì sẽ tạo ra một lock file.
Khi stop service thành công thì sẽ xóa lock file này đi.
Nếu lock file đang tồn tại thì không thể start được service.
Lock file sẽ đảm bảo chỉ có duy nhất một instance của service được thực hiện.

/etc/init.d/functions sẽ chứa các function tôi cần để điều khiển service như deamon để start, killproc để stop, status để lấy trạng thái service.

Để service này có thể được chỉ định auto start bằng chkconfig tôi phải thêm đoạn comment sau:
# chkconfig: - 10 12
trong comment này chkconfig nhận ba trường gia trị. Trường đầu chỉ định các runlevel mà service hoạt động. Tôi bỏ qua vì chkconfig sẽ làm việc này cho tôi. Trường tiếp theo là 10 là priority khi active service. Trường cuối là 12 là priority khi deactive service. Tôi có thể tùy chọn giá trị priority này.

#!/bin/sh
# network_example        This shell script takes care of starting and stopping
# chkconfig: - 10 12
# description: network_example service is ... \
# tcp socket listening on 8888
# Source function library.
. /etc/init.d/functions
port=8888
prog_name="network_example"
prog="nc"
lockfile="/var/lock/subsys/$prog_name"
start() {
        if [ -f $lockfile ]; then
                echo "Lock file is exists. Service is already running..."
                exit 1
        fi

        echo -n "Starting $prog_name service"
        daemon $prog -l $port &
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch $lockfile
        return $RETVAL
}
stop(){
        echo -n $"Shutting down $prog_name service "
        killproc $prog
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f $lockfile
        return $RETVAL
}
# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status $prog_name
        ;;
  restart|force-reload)
        stop
        start
        ;;
  try-restart|condrestart)
        if status $prog > /dev/null; then
            stop
            start
        fi
        ;;
  reload)
        exit 3
        ;;
  *)
        echo $"Usage: $0 {start|stop|status|restart|try-restart|force-reload}"
        exit 2
esac

Khi chạy init script tôi nhận được các kết quả như sau:

service network_example start
Starting network_example service

service network_example start
Lock file is exists. Service is already running...

netstat -tulpn | grep 8888
tcp 0 0 0.0.0.0:8888 0.0.0.0: LISTEN 4750/nc *

service network_example stop
Shutting down network_example service /bin/bash: line 1: 6692 Terminated nc -l 8888

chkconfig network_example start
reboot
Service network_example sẽ được auto start

Bài viết dựa trên một số nguồn tham khảo sau:
http://www.tldp.org/HOWTO/HighQuality-Apps-HOWTO/boot.html
https://unix.stackexchange.com/questions/12815/what-are-pid-and-lock-files-for

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

Male avatar

manhdung

44 bài viết.
239 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
Male avatar
67 11
Giới thiệu RabbitMQ là một message broker ( messageoriented middleware) sử dụng giao thức AMQP Advanced Message Queue Protocol (Đây là giao thức ph...
manhdung viết hơn 2 năm trước
67 11
Male avatar
45 4
Giả định bạn tiếp nhận một server mới toanh, bạn cần tìm một số thông tin về nó như loại CPU, loại main, loại memory, memory dùng của hãng nào... c...
manhdung viết hơn 1 năm trước
45 4
Male avatar
38 7
Giới thiệu MongoDB là một giải pháp nosql database. Data được lưu ở dạng các bson document. Hỗ trợ vertical scaling và horizontal scaling, dynamic...
manhdung viết hơn 2 năm trước
38 7
Bài viết liên quan
White
7 3
Đã có rất nhiều bài viết về process trên linux trên kipalog https://kipalog.com/posts/HedieuhanhProcess https://kipalog.com/posts/GioithieuveUN...
LinhPT viết 12 tháng trước
7 3
White
6 4
Ý nghĩa vm.swappiness là một biến trong Linux kernel điều khiển khi nào Linux kernel nên swap một page ra khỏi bộ nhớ đang sử dụng. Giá trị này c...
Bùi Hồng Hà viết gần 3 năm trước
6 4
White
4 0
Giới thiệu Các bạn là fan của tính toán phân tán]] chắc hẳn đều biết Werner Vogels]] (CTO của amazon) cũng như trang blog All Things Distributed]]...
Bùi Hồng Hà viết gần 3 năm trước
4 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


Male avatar
{{userFollowed ? 'Following' : 'Follow'}}
44 bài viết.
239 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!