Tạo Linux service với systemd
Linux
101
systemd
2
White

ajino2k viết ngày 08/09/2019

Khi làm việc với linux thì chúng ta không tránh khỏi phải tạo những dịch vụ của riêng bạn có thể mang lại cho bạn mức độ linh hoạt mà bạn sẽ không bao giờ gặp phải khi bị ràng buộc bởi bên thứ ba.

Điều thú vị là nó tạo ra một dịch vụ Linux khá dễ dàng: sử dụng ngôn ngữ lập trình yêu thích của bạn để viết một chương trình dài và biến nó thành một dịch vụ sử dụng systemd.

The program

Hãy tạo ra một máy chủ nhỏ bằng PHP code đơn giản sau . nhưng nó hoạt động tốt đáng ngạc nhiên =)) . Chúng tôi sẽ lắng nghe cổng UDP 10000 và trả lại bất kỳ tin nhắn nào nhận được với chuyển đổi ROT13:

<?php

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_bind($sock, '0.0.0.0', 10000);

for (;;) {
    socket_recvfrom($sock, $message, 1024, 0, $ip, $port);
    $reply = str_rot13($message);
    socket_sendto($sock, $reply, strlen($reply), 0, $ip, $port);
}

Let’s start it:

$ php server.php
$ nc -u 127.0.0.1 10000

Hello, world!
Uryyb, jbeyq!

Thật tuyệt, nó hoạt động. Bây giờ chúng tôi muốn tập lệnh này chạy mọi lúc, được khởi động lại trong trường hợp xảy ra lỗi (restart) và thậm chí còn tồn tại khi khởi động lại máy chủ. Đó là nơi mà systemd đi vào .

Turning it into a service
Chúng ta tạo 1 file như sau .
vim /etc/systemd/system/rot13.service

[Unit]
Description=ROT13 demo service
After=network.target
StartLimitIntervalSec=0[Service]
Type=simple
Restart=always
RestartSec=1
User=centos
ExecStart=/usr/bin/env php /data/vng/scripts/server.php

[Install]
WantedBy=multi-user.target

You’ll need to:
– đặt tên người dùng thực tế của bạn sau user=
– đặt đường dẫn thích hợp cho tập lệnh của bạn trong ExecStart=

Chúng ta bắt đầu start service .

$ systemctl start rot13

kích thuộc autostart khi boot server .

$ systemctl enable rot13

Going further
Bây giờ dịch vụ của bạn (hy vọng) hoạt động, điều quan trọng là phải đi sâu hơn một chút vào các tùy chọn cấu hình và đảm bảo rằng nó sẽ luôn hoạt động như bạn mong đợi.

Bắt đầu theo đúng thứ tự

Bạn có thể đã tự hỏi những gì After = chỉ thị đã làm. Điều đó chỉ có nghĩa là dịch vụ của bạn phải được bắt đầu sau khi mạng sẵn sàng. Nếu chương trình của bạn hy vọng máy chủ MySQL sẽ hoạt động, bạn nên thêm :

After=mysqld.service
Restart=always
RestartSec=1

Theo mặc định, systemd cố gắng khởi động lại sau 100ms. Bạn có thể chỉ định số giây chờ trước khi thử khởi động lại, sử dụng:

StartLimitBurst=5
StartLimitIntervalSec=10

systemd từ bỏ khởi động lại dịch vụ của bạn nếu nó không khởi động quá 5 lần trong khoảng thời gian 10 giây.

Lệnh RestartSec cũng có tác động đến kết quả: nếu bạn đặt nó khởi động lại sau 3 giây, thì bạn không bao giờ có thể đạt được 5 lần thử lại thất bại trong vòng 10 giây.
Cách khắc phục đơn giản luôn hoạt động là đặt StartLimitIntervalSec = 0. Bằng cách này, systemd sẽ cố gắng khởi động lại dịch vụ của bạn mãi mãi.

Nguồn : https://techzones.me/2019/09/08/tao-linux-service-voi-systemd/

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

ajino2k

9 bài viết.
0 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
3 2
Vấn đề bảo mật thông tin không chỉ đơn thuần là việc chống lại các cuộc tấn công từ hacker, ngăn chặn malware để đảm bảo thông tin không bị phá hủy...
ajino2k viết 1 năm trước
3 2
White
2 0
worker và prefork, vốn là 2 MultiProcessing Modules (MPMs) phổ biến trên Linux. Ngoài ra hiện nay còn có event (cũng Linux), mpm_winnt (cho Windows...
ajino2k viết 2 tháng trước
2 0
White
2 0
DDOS LINUX Phương pháp bảo vệ máy chủ Linux từ các cuộc tấn công DDoS . CONFIG_NETFILTER_XT_MATCH_STRING=m Hạn chế 20 yêu cầu mỗi giây iptables...
ajino2k viết 22 ngày trước
2 0
Bài viết liên quan
White
1 0
sudo du sh
t viết hơn 3 năm trước
1 0
White
35 10
Thời kỳ mới đi làm tôi nghĩ cứ phải gõ thật nhiều cho quen cho nhớ nhưng lâu dần việc đó cho cảm giác thật nhàm chán. Hiện giờ, những gì tôi hay là...
manhdung viết hơn 4 năm trước
35 10
White
1 0
Sử dụng option I với xargs Với option I thì bạn có thể sử dụng place holder với biến được lấy ra từ xargs man của option này: I replacestr R...
LinhPT viết hơn 3 năm trước
1 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

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


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