Câu trả lời:
Cú pháp mới hơn cho Suse Linux Enterprise 11 SP2 (và openSUSE?)
Cách tốt nhất là tạo một tập lệnh shell sẽ gọi tập lệnh PHP của bạn. Kịch bản shell này nên có trong tiêu đề của nó bình luận sau:
#!/bin/sh
### BEGIN INIT INFO
# Provides: nothing
# Required-Start: $all
# Default-Start: 3 5
# Default-Stop: 4
# Short-Description: single_line_description
# Description: multiline_description
### END INIT INFO
Bạn có thể tìm thấy một mẫu điển hình (với vô số ý kiến giải thích) trong /etc/init.d/skeleton
. Mẫu này bao gồm mã cần thiết để móc kịch bản PHP của bạn. Bạn sẽ thấy một trường hợp bắt đầu mà bạn sẽ phải gọi tập lệnh PHP của mình.
Tôi đã loại bỏ một số tham số tùy chọn trong tiêu đề vì nó không xuất hiện mà bạn sẽ cần chúng.
Quan trọng
Điều quan trọng là sử dụng bộ xương ít nhất là câu lệnh tình huống (xem hành động init script ) và để thực hiện ít nhất trường hợp bắt đầu. Trong trường hợp bắt đầu, đó là nơi để gọi kịch bản của bạn.
Bạn có thể tìm thấy ở đây một ví dụ tập lệnh nhỏ sẽ được gọi ở cuối boot: xem Gist của tôi . Tôi đặt một mức chạy không hợp lệ cho Dừng mặc định, nhưng bằng cách nào đó, tập lệnh vẫn được gọi trong khi tắt máy. Dù sao, mã trong trường hợp "dừng" được thực thi, không phải mã trong trường hợp "bắt đầu" trong khi tắt.
Khi bạn đã viết tập lệnh của mình, hãy sao chép tập lệnh /etc/init.d
để giả sử rằng tập lệnh init của bạn được gọi là thông báo khởi động, sau đó bạn sẽ làm (với quyền root):
chown root:root boot-notification
chmod 0750 boot-notification
mv boot-notification /etc/init.d/
Sau đó, bạn cần "đăng ký" tập lệnh trong hệ thống init. Bạn sẽ sử dụng insserv
lệnh (một lần nữa là root) hoặc bạn có thể sử dụng YaST:
insserv boot-notification
Sau đó, bạn có thể kiểm tra thêm rằng tập lệnh là một trong những tập lệnh cuối cùng được chạy bằng cách xem xét từng cấp độ init. Nếu bạn chọn chỉ runlevel 3, thì bạn có thể làm điều này:
ls -l /etc/init.d/rc3.d/S*
Điều này sẽ trả về một danh sách các liên kết đến init script. Liên kết đến tập lệnh của bạn phải ở cuối (hoặc gần nó) của danh sách.
Lưu ý: Nếu bạn muốn chơi xung quanh với cách viết init script năng động hơn, tôi khuyên bạn nên đọc 2 trang này:
(mở) SUSE sử dụng /etc/init.d/after.local
cho mục đích này. Chỉ cần thêm các lệnh bạn cần được thực hiện vào tập tin đó. Lưu ý rằng điều này hoạt động tốt với init SystemV, nhưng với systemd, điều này sẽ cần AFAIK cần được giải quyết khác nhau.
Đối với OpenSUSE 12.2 (Thần chú), tập lệnh cho "sau cục bộ" phải là /etc/init.d/after-local
và bạn có thể cần bật nó thông qua systemctl, như thế này ...
Để bật /etc/init.d/after-local,
systemctl enable after-local.service
Để kiểm tra trạng thái của /etc/init.d/after-local,
systemctl status after-local.service
Để thêm một tập lệnh init mới là khá đơn giản trên Suse.
Cách tốt nhất là tạo một tập lệnh shell sẽ gọi tập lệnh PHP của bạn. Kịch bản shell này nên có trong tiêu đề của nó bình luận sau:
#!/bin/sh
#chkconfig: 35 99 00
#description: Notify of boot completion
Bạn có thể tìm thấy một mẫu điển hình (có vô số ý kiến giải thích) trong /etc/init.d/skeleton.compat
đó (một mẫu hỗ trợ cú pháp chkconfig, bạn cũng 7etc/init.d/skeleton
hỗ trợ chuẩn LSB mới hơn, nhưng sẽ phức tạp hơn một chút để giải thích cho bạn cách thiết lập nó, mặc dù vậy quyền lực hơn). Mẫu này bao gồm mã cần thiết để móc kịch bản PHP của bạn. Bạn sẽ thấy một trường hợp bắt đầu mà bạn sẽ phải gọi tập lệnh PHP của mình.
Số quan trọng tôi đã cho bạn là trên chkconfig line
.
Khi bạn đã viết tập lệnh của mình, hãy sao chép tập lệnh /etc/init.d
để giả sử rằng tập lệnh init của bạn được gọi là thông báo khởi động, sau đó bạn sẽ làm (với quyền root):
# chown root:root boot-notification
# chmod 0750 boot-notification
# mv boot-notification /etc/init.d/
Sau đó, bạn cần "đăng ký" tập lệnh trong hệ thống init. Bạn sẽ sử dụng chkconfig
lệnh (một lần nữa là root):
# chkconfig --add boot-notification
Kiểm tra xem điều này đã được đưa vào tài khoản đúng chưa:
# chkconfig boot-notification
boot-notification on
Nếu bạn thấy trên, nó là tốt!
Sau đó, bạn có thể kiểm tra thêm rằng tập lệnh là một trong những tập lệnh cuối cùng được chạy bằng cách xem xét từng cấp độ init. Nếu bạn chọn chỉ runlevel 3, thì bạn có thể làm điều này:
$ ls -l /etc/init.d/rc3.d/S*
Điều này sẽ trả về một danh sách các liên kết đến init script. Liên kết đến tập lệnh của bạn phải ở cuối (hoặc gần nó) của danh sách.
Lưu ý: Nếu bạn muốn chơi xung quanh với cách viết init script năng động hơn, tôi khuyên bạn nên đọc 2 trang này:
Tôi thấy rằng có 2 cách để làm điều đó:
sudo crontab -e
sau đó gõ
@reboot sudo <command_to_execute_at_startup>