Systemd đang làm việc với các dịch vụ và mục tiêu . Mục tiêu tương đương với runlevels , dịch vụ tương đương với init script . Hầu hết cấu hình systemd được đặt trong /usr/lib/systemd
khi init chuẩn nằm trong /etc/{init.d,rc*.d,inittab}
.
Khi một đá vấn đề trong quá trình khởi động (mặc định là getty.target hoặc graphical.target , bạn có thể nhận được chúng với systemctl get-default
) systemd được chuyển sang emergency.target .
Mục tiêu "khẩn cấp" này sẽ lần lượt tải tệp emergency.service
. Dịch vụ này chứa nhiều dòng và trong số đó:
...
[Service]
Environment=HOME=/root
WorkingDirectory=/root
ExecStartPre=-/bin/plymouth quit
ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" to try again\\nto boot into default mode.'
ExecStart=-/bin/sh -c "/sbin/sulogin; /usr/bin/systemctl --fail --no-block default"
...
Chúng tôi chỉ cần thay thế cuộc gọi đến /sbin/sulogin
:
ExecStart=-/bin/sh -c "/sbin/sushell; /usr/bin/systemctl --fail --no-block default"
Và chúng ta sẽ được thả trực tiếp vào một vỏ, thay vì được nhắc nhập mật khẩu qua sulogin. (Chúng tôi có thể sử dụng /bin/sh
, nhưng /sbin/sushell
phù hợp với câu trả lời cho CentOS6 / RHEL6. Trên thực tế, sushell
chỉ cần thực hiện $SUSHELL
theo mặc định /bin/bash
.)
Để thực hiện thay đổi này là "vĩnh viễn", tức là miễn nhiễm với các yum
bản cập nhật, hãy thay đổi bản sao của tệp này và đặt nó vào /etc/systemd/system/
. Ngoài ra, để làm cho "chế độ cứu hộ" hoạt động theo cùng một cách, hãy thay thế cùng một dòng rescue.service
. Đây là tập lệnh shell / sed để đơn giản hóa quy trình:
for SERVICE in rescue emergency ; do
sed '/^ExecStart=/ s%"/sbin/sulogin;%"/sbin/sushell;%' /usr/lib/systemd/system/$SERVICE.service > /etc/systemd/system/$SERVICE.service
done
Để kiểm tra điều này, hãy đảm bảo hệ thống không được sử dụng và yêu systemd
cầu chuyển sang rescue
mục tiêu:
systemctl rescue
Điều này sẽ đóng các kết nối mạng và mở một vỏ tại bàn điều khiển. Bạn có thể kiểm tra với emergency
mục tiêu, nhưng nó không hoạt động hoàn toàn sạch sẽ (Vì một số lý do) và có thể yêu cầu khởi động lại đầy đủ để ra khỏi.
Bạn cũng có thể kiểm tra những thứ này từ menu boot (grub). Để kiểm tra chế độ khẩn cấp, thật dễ dàng. Khởi động và khi bạn nhận được menu, nhấn "e" để chỉnh sửa và sử dụng D-pad để điều hướng đến dòng bắt đầu bằng linux16
và nối thêm (nhấn CTRL-A
để đến cuối dòng) emergency
:
linux16 ... emergency
Để thử nghiệm chế độ cứu hộ, đó là các bước tương tự như trên nhưng bạn phải rõ ràng hơn:
linux16 ... systemd.unit=rescue.target