Thiết lập tự động khởi chạy ứng dụng trên Linux

Việc cấu hình để một ứng dụng hoặc script tự động chạy khi hệ thống Linux khởi động có thể được thực hiện theo nhiều cách khác nhau, tùy thuộc vào bản phân phối Linux bạn đang sử dụng (ví dụ: Ubuntu, CentOS, Fedora). Dưới đây là các phương pháp phổ biến:

1. Sử dụng systemctl (cho các hệ thống dùng systemd)

Các bản phân phối Linux hiện đại như Ubuntu, Fedora, CentOS 8 trở lên thường sử dụng systemd. Bạn có thể tạo một tệp dịch vụ cho systemd.

Tạo tệp dịch vụ systemd

Tạo một tệp tin mới trong thư mục /etc/systemd/system/. Ví dụ, để ứng dụng của bạn có tên là myapp tự động chạy, bạn có thể tạo tệp /etc/systemd/system/myapp.service với nội dung như sau:

[Unit]
Description=My Application Service

[Service]
ExecStart=/usr/local/bin/myapp --daemon
Restart=always
User=your_user

[Install]
WantedBy=multi-user.target

Sau khi tạo tệp dịch vụ, thực hiện các lệnh sau:

  1. Tải lại cấu hình systemd:
    sudo systemctl daemon-reload
  2. Kích hoạt dịch vụ để nó tự động chạy khi khởi động:
    sudo systemctl enable myapp.service
  3. Khởi động dịch vụ ngay lập tức (tùy chọn):
    sudo systemctl start myapp.service

2. Sử dụng cron

cron là một công cụ lập lịch tác vụ mạnh mẽ và có thể được sử dụng để chạy lệnh khi hệ thống khởi động bằng chỉ thị @reboot.

  1. Mở tệp crontab của người dùng hiện tại để chỉnh sửa:
    crontab -e
  2. Thêm dòng sau vào cuối tệp để chỉ định ứng dụng chạy lúc khởi động:
    @reboot /path/to/your/application --options
    Thay /path/to/your/application bằng đường dẫn thực tế đến ứng dụng hoặc script của bạn.
  3. Lưu và thoát khỏi trình soạn thảo.

3. Sử dụng rc.local (Phương pháp cũ hơn, có thể không khả dụng hoặc bị vô hiệu hóa trên một số hệ thống mới)

Tệp /etc/rc.local cho phép bạn chạy các lệnh tùy chỉnh khi quá trình khởi động hoàn tất.

  1. Mở tệp /etc/rc.local bằng trình soạn thảo với quyền root:
    sudo nano /etc/rc.local
  2. Thêm lệnh của bạn vào trước dòng exit 0. Nên chạy ứng dụng ở chế độ nền bằng cách thêm ký tự & vào cuối lệnh:
    /path/to/your/application &
  3. Lưu và đóng tệp.
  4. Đảm bảo tệp /etc/rc.local có quyền thực thi:
    sudo chmod +x /etc/rc.local

4. Sử dụng SysVinit scripts (Cho các hệ thống cũ hơn hoặc các bản phân phối không dùng systemd)

Đối với các hệ thống sử dụng trình quản lý khởi động SysVinit, bạn cần tạo một script trong thư mục /etc/init.d/.

Tạo script init.d

Tạo một tệp script, ví dụ /etc/init.d/myapp, với nội dung tương tự như sau:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          myapp
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: My Application Service
# Description:       Enable service provided by my application.
### END INIT INFO

APP_PATH="/usr/local/bin/myapp"
PID_FILE="/var/run/myapp.pid"

start() {
    echo "Starting My Application..."
    start-stop-daemon --start --pidfile $PID_FILE --exec $APP_PATH --background --make-pidfile
}

stop() {
    echo "Stopping My Application..."
    start-stop-daemon --stop --pidfile $PID_FILE --retry 5
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  status)
    # Thêm lệnh kiểm tra trạng thái tại đây nếu cần
    ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
    ;;
esac

exit 0

Sau khi tạo script:

  1. Cấp quyền thực thi cho script:
    sudo chmod +x /etc/init.d/myapp
  2. Thêm script vào hệ thống khởi động sử dụng update-rc.d:
    sudo update-rc.d myapp defaults
  3. Nếu hệ thống của bạn đã chuyển sang systemd nhưng bạn vẫn muốn sử dụng script kiểu cũ, bạn có thể cần tạo một tệp dịch vụ systemd để gọi script init.d. Tuy nhiên, cách tốt nhất là chuyển hoàn toàn sang quản lý bằng systemd nếu có thể.

Để xác định trình quản lý khởi động bạn đang sử dụng, bạn có thể chạy lệnh: ps --no-headers -o comm 1. Nếu kết quả là systemd, bạn đang sử dụng systemd.

Thẻ: systemd cron init.d rc.local Linux startup

Đăng vào ngày 26 tháng 5 lúc 12:13