Câu trả lời:
Đặt tập lệnh vào cron
bảng người dùng thích hợp (ví dụ: crontab ) với lịch biểu là @reboot
.
Một người dùng có thể chỉnh sửa cron
bảng của nó với crontab -e
.
Một ví dụ sẽ chạy /path/to/script.sh
khi khởi động:
@reboot /path/to/script.sh
Nếu bạn cần chạy nó dưới quyền root, đừng sử dụng @reboot sudo /path/to/script.sh
;
sử dụng sudo crontab -eu root
để chỉnh sửa crontab của root.
Xem thêm: crontab (1), cron (8), crontab (8)
Ubuntu 15.04 và chuyển tiếp theo mặc định sử dụng một cái gì đó gọi systemd
là chương trình (thuộc loại) tự động hóa các dịch vụ và quy trình khởi động. Bạn có thể tự làm và thêm nó vào danh sách các dịch vụ khởi động chỉ với một chút nỗ lực.
Dịch vụ Systemd cơ bản
Đây là một .service
tệp barebones có thể được sử dụng để khởi chạy máy chủ python gui của tôi (có thể là một tập lệnh shell, nó không thành vấn đề):
[Unit]
Description=Python GUI Server
[Service]
ExecStart=/home/pi/software/GUI_POE.py &
[Install]
WantedBy=multi-user.target
Các Description
tùy chọn là bất kỳ chuỗi mô tả các dịch vụ là gì hay không.
Các ExecStart
tùy chọn xác định lệnh để thực thi. Ở đây, tôi đưa ra một đường dẫn đến một kịch bản python thực thi và sử dụng &
mã thông báo để chạy nó trong nền.
Các WantedBy
tùy chọn quy định cụ thể ưu tiên, dựa trên những gì mục tiêu muốn sử dụng dịch vụ này. Nếu bạn không cần dịch vụ của mình để chạy vào bất kỳ thời điểm cụ thể nào, thì hãy đặt nó thành multi-user.target
.
Thủ tục cơ bản
Viết kịch bản bạn muốn chạy khi khởi động bằng cách sử dụng nano
hoặc bất kỳ trình soạn thảo nào bạn chọn. Hãy chắc chắn rằng bạn bao gồm shebang thích hợp ở đầu tệp ( #!/bin/bash
đối với tập lệnh bash) và cung cấp cho nó quyền thực thi với chmod
.
Chỉ cần viết dịch vụ của bạn vào một tệp có tên my_service.service và sau đó sao chép nó vào directoy thích hợp với cp my_service.service /lib/systemd/system/
.
Bắt đầu dịch vụ của bạn : sudo systemctl start my_service.service
. Điều này khởi chạy bất cứ kịch bản nào bạn đã nói với dịch vụ của bạn để chạy. Lệnh tương tự với "stop" thay vì bắt đầu sẽ tắt nó.
Thêm dịch vụ của bạn vào quá trình khởi động : sudo systemctl enable my_service.service
. Để loại bỏ nó, chỉ cần thay thế "enable" bằng "vô hiệu hóa" trong cùng một lệnh.
Và đó là nó! Hãy nhớ rằng tập lệnh của bạn sẽ tự động được chạy với quyền root, vì đó là mặc định trong các dịch vụ systemd.
Ví dụ đơn giản của tôi (Đầy đủ)
Để tham khảo, đây là một dịch vụ systemd đơn giản mà tôi có để khởi chạy Máy chủ GUI Python đơn giản bằng Dash:
[Unit]
Description=Python GUI Server
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
Dịch vụ ví dụ này sử dụng tập lệnh Python3 nhưng công thức hoàn toàn giống với tập lệnh shell.
Đọc thêm có thể được tìm thấy tại hướng dẫn tuyệt vời này của DigitalOcean và chủ đề AskUb Ubuntu này với một câu trả lời tuyệt vời đã giúp tôi học systemd. Hi vọng điêu nay co ich!