Xorg tự động khởi động
Ngoài các kịch bản khởi động ở cấp hệ thống, môi trường máy tính để bàn của bạn có thể có các chương trình tự động chạy riêng. Thư mục .config/autostart
được cho là một cách trung lập trên máy tính để xác định các mục nhập tự động. /etc/xdg/autostart
dành cho cấu hình toàn hệ thống. Chi tiết về thông số kỹ thuật tại http://developer.gnome.org/autostart-spec/ .
Đối với các mục tự khởi động LXDE cũng có thể được đặt trong ~/.config/lxsession/LXDE/autostart
.
Sẽ hơi khác một chút nếu bạn cần chạy tập lệnh của mình sau khi mạng hoạt động. Trong trường hợp đó, bạn nên kiểm tra các tập lệnh kết nối sau đặc biệt có thể được xác định cho trình quản lý mạng của bạn. Cả NetworkManager và wicd đều có những cách riêng để chỉ định các mục nhập tự động sau kết nối. Nếu mạng được cấu hình thông qua ifupdown
, thì các tập lệnh đăng lên có thể được đặt trong /etc/network/if-up.d/
thư mục. Nhưng một cách tiếp cận tốt hơn để chạy các kịch bản hậu kết nối có thể là systemd (đối với các hệ thống hỗ trợ nó, phần lớn các bản phân phối hiện đại).
Tự động khởi động như một dịch vụ systemd
Nếu thứ bạn muốn tự khởi động không phải là một ứng dụng đồ họa cần có máy tính để bàn thì tốt nhất bạn nên tránh sử dụng bất kỳ tiện ích tự khởi động nào được cung cấp bởi xorg hoặc bởi môi trường máy tính để bàn hiện tại của bạn.
systemd
đã trở nên phổ biến trong nhiều bản phát hành hiện đại, và nó cung cấp rất nhiều quyền kiểm soát và tính linh hoạt về cách thức các dịch vụ của bạn được bắt đầu và cách chúng chạy.
Tôi sẽ tóm tắt một số lợi ích ( systemd có thể làm nhiều hơn nữa ):
- Chạy với quyền root hoặc người dùng cụ thể: vd
User=myuser
- Khởi động lại dịch vụ khi không thành công với thời gian chờ cấu hình:
Restart=on-failure|on-watchdog|on-abnormal|always
- Đặt loại dịch vụ:
Type=simple|forking|oneshot|notify|dbus
- Thiết lập các điều kiện tiên quyết và phụ thuộc khởi động, tức là bạn có thể đặt dịch vụ của mình bắt đầu sau khi mạng kết thúc (
Wants=network-online.target
trong [Unit]
phần).
Một dịch vụ ví dụ bắt đầu một telegram-cli daemon. Đặt nó vào /etc/systemd/system/tg.service
.
[Unit]
Description=MyDaemon
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/local/bin/telegram-cli -k /etc/telegram-cli/tg-server.pub -W -P 1234 -d -vvvRC
ExecStop=/usr/bin/pkill -f telegram-cli
User=jicu
[Install]
WantedBy=multi-user.target
Bây giờ bạn có thể kích hoạt dịch vụ để tự khởi động:
sudo systemctl enable tg
Bắt đầu dịch vụ:
sudo systemctl start tg
Dừng dịch vụ:
sudo systemctl stop tg
Kiểm tra trạng thái:
systemctl status tg
Vô hiệu hóa dịch vụ:
sudo systemctl disable tg
Để tiết kiệm cho bạn thêm gõ, bạn có thể thêm vào ~/.bashrc
dòng của mình alias sc='sudo systemctl $*'
sau đó bạn sẽ có thể rút ngắn các lệnh trên để ví dụ sc start tg
.
LƯU Ý: Nếu bạn đã sử dụng cron
thì hãy biết rằng các mục crontab được chạy trong môi trường bị hạn chế - áp dụng tương tự cho systemd
: luôn sử dụng các đường dẫn tuyệt đối và không đưa ra giả định về bất kỳ biến nào được xác định. Hoàn toàn đặt bất kỳ biến nào mà tập lệnh của bạn phụ thuộc vào. systemd
sẽ không sử dụng người dùng của bạn .bashrc
và $PATH
.
Thêm thông tin: