Computer >> Máy Tính >  >> Hệ thống >> Linux

Làm cách nào để Quản lý Khởi động Dịch vụ &Tập lệnh trên CentOS / RHEL?

Trong bài viết này, chúng ta sẽ tìm hiểu kiến ​​thức cơ bản về cách định cấu hình các dịch vụ và tập lệnh để khởi động tự động trong Linux CentOS / RHEL 7/8. Đặc biệt, chúng ta sẽ làm quen với systemd daemon, tìm hiểu cách thêm dịch vụ vào hoặc xóa chúng khỏi khởi động và xem xét các cách thay thế để khởi động tập lệnh hoặc daemon khi khởi động trong Linux.

Bài viết nhằm hướng dẫn bạn cách nhanh chóng tìm thấy danh sách các dịch vụ hoặc tập lệnh được khởi động tự động trong Linux, thêm các dịch vụ hoặc tập lệnh của bạn để khởi động hoặc tắt tính năng khởi động tự động của một số ứng dụng.

Sử dụng Systemctl để quản lý các dịch vụ Systemd trong Linux

Hầu hết các bản phân phối Linux phổ biến (CentOS, RHEL, Debian, Fedora và Ubuntu) sử dụng systemd khởi động daemon thay vì init.d . Systemd là một trình quản lý dịch vụ Linux được sử dụng để khởi động các daemon khác và quản lý chúng. Nó sử dụng các tệp đơn vị từ /etc/systemd/system ( init.d các tập lệnh đã sử dụng từ /etc/init.d/ ). Systemd cho phép bạn song song khởi động dịch vụ khi khởi động hệ điều hành.

Để quản lý systemd, systemctl lệnh được sử dụng.

Trước hết, sau khi khởi động hệ thống, chúng tôi sẽ kiểm tra danh sách các đơn vị có sẵn trong systemd :

systemctl list-units

Làm cách nào để Quản lý Khởi động Dịch vụ &Tập lệnh trên CentOS / RHEL?

Bạn có thể lấy danh sách các tệp đơn vị bằng lệnh này:

systemctl list-unit-files

Lệnh này sẽ hiển thị tất cả các tệp đơn vị có sẵn .

Để hiển thị danh sách các dịch vụ đang hoạt động và trạng thái của chúng, hãy chạy lệnh sau:

# systemctl list-units -t service

Vì một số đơn vị có thể không hoạt động sau khi khởi động, bạn có thể nhận danh sách đầy đủ bằng cách sử dụng —tất cả tùy chọn.

# systemctl list-units --all

UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active waiting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
● exim.service not-found inactive dead exim.service
firewalld.service loaded active running firewalld - dynamic firewall daemon
getty@tty1.service loaded active running Getty on tty1
● iptables.service not-found inactive dead iptables.service
Bring up/down networking
● NetworkManager-wait-online.service not-found inactive dead

Như bạn có thể thấy từ danh sách, ngay cả những dịch vụ không tìm thấy trên đĩa cũng được hiển thị.

Ngoài ra, bạn có thể sử dụng một số cờ khác, ví dụ:

  • —state - được sử dụng để phát hiện trạng thái daemon:Load, Active, Sub
  • —loại - cho phép lọc các đơn vị theo loại

Ví dụ:

systemctl list-units --all --state=active —Chỉ hiển thị danh sách các đơn vị systemd đang hoạt động

systemctl list-units —type=service - hiển thị danh sách các đơn vị là dịch vụ

Làm cách nào để Quản lý Khởi động Dịch vụ &Tập lệnh trên CentOS / RHEL?

Làm cách nào để tạo một dịch vụ trong Systemd?

Để quản lý các dịch vụ, systemd đang sử dụng một cú pháp đặc biệt. Bạn phải thêm .service sau tên của một dịch vụ. Ví dụ:

# systemctl enable nginx.service - lệnh thêm máy chủ web nginx để khởi động

Lệnh này sẽ tạo liên kết tượng trưng đến tệp được chỉ định trong lệnh dịch vụ trong systemd thư mục khởi động.

# systemctl enable nginx.service

Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service
Đầu ra của lệnh hiển thị thư mục, trong đó liên kết biểu tượng đến tệp dịch vụ đã được tạo.

Để kiểm tra xem một dịch vụ đã được thêm vào khởi động hay chưa, bạn có thể xem trạng thái của nó:

systemctl status nginx.service

Lưu ý dòng sau trong đầu ra:

Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor preset: disabled)

Đã bật giá trị có nghĩa là dịch vụ này được thêm vào khởi động Linux. Nếu dịch vụ không được khởi động tự động, bạn sẽ thấy bị vô hiệu hóa tại đây.

Làm cách nào để tắt một dịch vụ trong Systemd?

Bạn có thể xóa một dịch vụ khỏi khởi động để nó không được khởi động khi khởi động Linux (trong khi bản thân dịch vụ đó không bị xóa). Để tắt tính năng khởi động dịch vụ, hãy chạy lệnh sau:

# systemctl disable your_service

Ví dụ:để tắt tự động khởi động nginx:

# systemctl disable nginx.service

Removed symlink /etc/systemd/system/multi-user.target.wants/nginx.service

Sau khi thực hiện, liên kết biểu tượng tới tệp dịch vụ sẽ bị xóa khỏi thư mục systemd. Bạn có thể đảm bảo rằng dịch vụ có được khởi động tự động hay không:

# systemctl is-enabled nginx

Làm cách nào để che dấu các đơn vị bằng Systemd?

Tôi đã gặp một số dịch vụ xấu vẫn ở trong quá trình khởi động sau khi vô hiệu hóa chúng và bắt đầu sau khi khởi động lại Linux. Để giải quyết vấn đề này, bạn có thể che một dịch vụ:

# systemctl mask nginx.service

Sau đó, nó sẽ không khởi động theo cách thủ công hoặc sau khi khởi động lại hệ điều hành:

# systemctl mask nginx.service

Created symlink from /etc/systemd/system/nginx.service to /dev/null.

# service nginx restart

Redirecting to /bin/systemctl restart nginx.service
Failed to restart nginx.service: Unit is masked.

Bạn có thể hiển thị một dịch vụ bằng lệnh này:

# systemctl unmask nginx.service

Removed symlink /etc/systemd/system/nginx.service.

Nếu sau khi che một dịch vụ, bạn kiểm tra các tệp đơn vị của mình, bạn sẽ thấy rằng dịch vụ đó được đánh dấu là đã che :

Làm cách nào để Quản lý Khởi động Dịch vụ &Tập lệnh trên CentOS / RHEL?

Chạy Tập lệnh hoặc Dịch vụ với Rc.local

Để chạy các tập lệnh khác nhau khi khởi động Linux, rc.local thường được sử dụng.

Bên cạnh tập lệnh, sử dụng rc.local bạn cũng có thể chạy các dịch vụ, ngay cả những dịch vụ được bắt đầu sử dụng systemd . Tôi không biết tại sao bạn nên sử dụng rc.local, nếu có systemd, nhưng đây là một vài ví dụ.

Trước hết, /etc/rc.local phải thực thi được:

chmod +x /etc/rc.local

Rc.local phải được thêm vào tự động khởi động systemd:

systemctl enable rc-local

Và chúng tôi có thể thêm lệnh để bắt đầu nginx máy chủ web thành rc.local :

service nginx start

Làm cách nào để Quản lý Khởi động Dịch vụ &Tập lệnh trên CentOS / RHEL?

Nhưng tôi hiếm khi sử dụng rc.local để bắt đầu dịch vụ. Thường thì rc.local được sử dụng để bắt đầu một tập lệnh hoặc chạy một lệnh một lần.

Ví dụ:tôi đã tạo tập lệnh /root/test.sh điều đó thực hiện điều gì đó và tôi muốn chạy nó ngay sau khi khởi động. Thêm dòng sau vào tệp rc.local:

sh /root/test.sh

Làm cách nào để Quản lý Khởi động Dịch vụ &Tập lệnh trên CentOS / RHEL?

Bắt đầu với CentOS 7, các nhà phát triển chỉ ra rằng rc.local là một daemon lỗi thời và không nên sử dụng nó để khởi động các tập lệnh hoặc dịch vụ. Nhưng tôi sử dụng nó khi nó vẫn đang hoạt động vì nó rất đơn giản.

Cách tạo dịch vụ Linux với Systemd?

Bạn có thể tạo daemon của riêng mình và quản lý nó qua systemd.

Ví dụ:bạn muốn bắt đầu cùng một tập lệnh ( /root/test.sh ) mỗi khi hệ thống được khởi động lại. Hãy bắt đầu với việc tạo một tệp dịch vụ mới của chúng tôi:

touch /etc/systemd/system/test-script.service
chmod 664 /etc/systemd/system/test-script.service
nano /etc/systemd/system/test-script.service

Đây là nội dung của tệp:

[Unit]
Description=Template Settings Service
After=network.target
[Service]
Type=oneshot
User=root
ExecStart=/root/test.sh
[Install]
WantedBy=multi-user.target

Các thông số chính là:

User - một tài khoản người dùng mà daemon được bắt đầu từ

Type=oneshot - systemd nên đợi quá trình kết thúc trước khi tiếp tục với các đơn vị khác

Kiểm tra và khởi động lại nó:
# systemctl daemon-reload
# systemctl start test-script.service
# systemctl status test-script.service

● test-script.service - Test
Loaded: loaded (/etc/systemd/system/test-script.service; disabled; vendor preset: disabled)
Active: active (running)

Nếu dịch vụ hoạt động tốt, hãy thêm nó vào khởi động systemd:

# systemctl enable test-script.service

Created symlink from /etc/systemd/system/multi-user.target.wants/test-script.service to /etc/systemd/system/test-script.service.

Do đó, bạn có thể thêm bất kỳ tập lệnh nào để tự động khởi động và quản lý chúng thông qua systemd.

Làm cách nào để chạy tập lệnh bằng Cron?

Nếu bạn muốn chạy một tập lệnh hoặc một lệnh với tần suất nào đó, bạn có thể sử dụng cron :

crontab -e - mở trình chỉnh sửa để thay đổi bảng tác vụ cron

Và thêm một nhiệm vụ bạn muốn ở đây, ví dụ:

* * * * * /root/test.sh - để chạy một tập lệnh mỗi phút một lần.

Bạn có thể viết watch-dog script sẽ kiểm tra trạng thái dịch vụ và nếu dịch vụ không chạy, script sẽ khởi động nó. Tôi đang sử dụng cách tương tự trong một số dự án của mình.

Để hiển thị danh sách tất cả các tác vụ trong cron, hãy chạy lệnh:

# crontab -l

* * * * * /root/test.sh

Các giá trị thời gian có sẵn để chạy các tác vụ cron theo thứ tự:

  • Phút:0-59
  • Giờ:0-59
  • Ngày trong tháng:1-31
  • Tháng:1-12
  • Ngày trong tuần:0-7 (0 hoặc 7 là Chủ nhật)

Trong nhiệm vụ của chúng tôi, tập lệnh được chạy mỗi phút một lần, vì vậy sẽ có * dấu hoa thị * ở đó.

Bạn cũng có thể đặt tập lệnh vào một trong cron thư mục:

  • /cron.daily - cho một tập lệnh chạy mỗi ngày một lần
  • /cron.hourly - cho một tập lệnh chạy mỗi giờ một lần
  • /cron.monthly - cho một tập lệnh chạy mỗi tháng một lần
  • /cron.weekly - cho một tập lệnh chạy mỗi tuần một lần

Các tập lệnh trong các thư mục được chỉ định sẽ được chạy theo lịch trình tự động.

Tập lệnh khởi động Bash:.bashrc

Nếu bạn muốn thực hiện một số tác vụ khi khởi động SSH bảng điều khiển, bạn có thể thêm bất kỳ lệnh hoặc tập lệnh nào vào .bash_profile hoặc .bashrc tập tin. Về lý thuyết, bạn có thể thêm hành động vào bất kỳ tệp nào trong số các tệp này, nó sẽ được chạy trong mọi trường hợp. Thông thường, những thứ bạn cần được thêm vào .bashrc và .bashrc được bắt đầu từ .bash_profile.

Tôi đã thêm lệnh khởi động lại dịch vụ web nginx vào tệp .bashrc:

service nginx restart

Làm cách nào để Quản lý Khởi động Dịch vụ &Tập lệnh trên CentOS / RHEL?

Sau đó, tôi đã lưu tệp và khởi động lại phiên SSH:

Làm cách nào để Quản lý Khởi động Dịch vụ &Tập lệnh trên CentOS / RHEL?

Như bạn thấy, khi khởi động thiết bị đầu cuối, máy chủ web cũng đã được khởi động lại. Những hành động nào có thể được thực hiện khi khởi động thiết bị đầu cuối? Đó có thể là một số công cụ bổ sung, như thời gian hoạt động kiểm tra máy chủ:

Làm cách nào để Quản lý Khởi động Dịch vụ &Tập lệnh trên CentOS / RHEL?

Hoặc nếu bạn muốn truy cập thư mục cụ thể và bắt đầu mc khi chạy bảng điều khiển ssh, hãy thêm phần sau vào .bashrc :

cd /var/
mc

Làm cách nào để Quản lý Khởi động Dịch vụ &Tập lệnh trên CentOS / RHEL?

Hy vọng rằng bài viết về cách quản lý dịch vụ Linux hoặc khởi động script trong Linux hữu ích với bạn (bài viết này được viết cho CentOS và RHEL, nhưng phù hợp với các bản phân phối khác). Tôi chắc chắn rằng thông tin này sẽ hữu ích cho những người đang nghiên cứu kiến ​​thức cơ bản về quản trị hệ thống Linux.