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

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

White

manhdung

44 bài viết.
263 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
76 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 3 năm trước
76 11
White
48 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 gần 2 năm trước
48 4
White
41 12
Trong phần 1, tôi đã giới thiệu về sơ lược rabbitmq, vai trò của rabbitmq trong hệ thống phân tán và hướng dẫn cài đặt. Trong phần này, tôi sẽ trìn...
manhdung viết 3 năm trước
41 12
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 hơn 1 năm 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 hơn 3 năm trước
6 4
White
5 1
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 hơn 3 năm trước
5 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


White
{{userFollowed ? 'Following' : 'Follow'}}
44 bài viết.
263 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á!