Có ít nhất ba cách "thích hợp" để thực hiện các công việc khởi động trong Ubuntu (giả sử bạn không chỉ muốn gắn kết nó), được liệt kê ở đây theo thứ tự ưu tiên giảm dần:
/etc/init/*.conf
(Mới bắt đầu)
/etc/init.d/*
(sysvinit)
/etc/rc.local
(kịch bản thay đổi runlevel)
Cũng có khả năng sử dụng các quy tắc udev, nhưng nó sẽ bị ảnh hưởng. Tôi đề nghị chống lại nó. Kịch bản sysvinit quá mức cần thiết cho một điều nhỏ như vậy, vì vậy tôi sẽ tập trung vào hai tùy chọn khác. Kịch bản thay đổi runlevel là đơn giản nhất (mặc dù ít được ưu tiên nhất), vì vậy tôi sẽ bắt đầu từ đó.
Các /etc/rc.local
tập tin chỉ đơn giản là thực hiện bởi các /etc/init.d/rc.local
kịch bản sysvinit, đó là (theo mặc định) thực hiện trước khi chuyển sang bất kỳ bình thường "trên" runlevel (ví dụ như khi bạn khởi động bình thường, nhưng không phải khi bạn đóng cửa hoặc vào chế độ phục hồi). Để thực hiện thiết lập thiết bị khởi động, chỉ cần thêm phần này vào cuối /etc/rc.local
, giả sử rằng tệp của bạn được gọi /srv/diskimage
và bạn muốn sử dụng /dev/loop0
làm thiết bị lặp:
losetup /dev/loop0 /srv/diskimage
Đó thực sự là tất cả để có nó. Tất nhiên, thay thế tên tệp bằng bất cứ thứ gì hoạt động tốt nhất trên thiết lập của bạn.
Nếu bạn muốn cụ thể hơn một chút về nó, bạn có thể tạo một công việc Upstart cho nó để thiết lập nó một khi hệ thống tập tin giữ nó đã được gắn kết. Một ví dụ sẽ là như sau, giả sử đó /srv
là điểm gắn kết chứa diskimage
tệp của bạn :
description "Setup loop devices after filesystems are mounted"
start on mounted MOUNTPOINT=/srv
task
exec losetup /dev/loop0 /srv/diskimage
Điều này đủ đơn giản để tuân theo khái niệm: Dòng đầu tiên chỉ là một nhận xét cho độc giả của con người và hướng dẫn Upstart để đợi cho đến khi /srv
hệ thống tập tin được gắn kết, thực hiện quy trình losetup và xem xét chính mình khi quá trình thoát thành công (a " nhiệm vụ ", trái ngược với một dịch vụ liên tục). Chỉ cần đặt những nội dung đó trong một tập tin phù hợp /etc/init/*.conf
. Tôi sẽ chọn /etc/init/losetup.conf
, bản thân mình.
Những lợi thế của công việc Upstart so /etc/rc.local
với một điều đơn giản như vậy là nhỏ nhưng quan trọng. Đầu tiên, /etc/rc.local
không được dùng nữa, và việc sử dụng nó như là một "hộp cát lộn xộn để hoàn thành công việc" được mọi người ngày nay cau mày. Trong số các lý do khác để sử dụng nó, một số chương trình sử dụng tệp đó sẽ đơn giản ghi đè lên nội dung và rất khó để điều chỉnh các tập lệnh khác nhau cần vào cùng một tệp. Thứ hai, Upstart thực sự xử lý việc kiểm tra phụ thuộc cho bạn (đảm bảo hệ thống tệp được gắn kết trước), vì vậy nếu có sự cố khi cài đặt hệ thống tệp, nó sẽ khôngcố gắng thiết lập thiết bị lặp .... nhưng một khi bạn đã giải quyết và gắn nó. Thứ ba, Upstart linh hoạt hơn rất nhiều: ví dụ, bạn có thể đủ thông minh để tìm một thiết bị lặp không sử dụng và "phát ra" thiết bị lặp đó để sử dụng trong các công việc mới bắt đầu khác, tương tự như cách chúng tôi sử dụng biến "MOUNTPOINT" trong ví dụ này ở trên.
/etc/init.d/something
, hoặc/etc/rc.local
, nhưng tôi đề nghị ở lại với bất kỳ phương pháp nào hiệu quả.