kích hoạt quy tắc udev từ systemd


7

Tôi có một trong những cái ôm đó, có một quản lý quyền lực rất tích cực. Để ngăn chặn chu kỳ tải tăng lên đến những con số quan trọng, tôi đã viết một quy tắc udev:

SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}=="TOSHIBA MK2555GS", RUN+="/usr/bin/hdparm -B 200 /dev/%k"

Vấn đề là, quy tắc này không được kích hoạt sau khi tôi đánh thức máy tính xách tay của tôi khỏi giấc ngủ. Vì vậy, tôi có dịch vụ systemd sau:

[Unit]
Description=root resume actions
After=suspend.target

[Service]
Type=simple
ExecStart=/bin/hdparm -B 200 /dev/sda

[Install]
WantedBy=suspend.target

Tôi thích ExecStartlệnh này là một cái gì đó như /bin/udevadm trigger --subsystem-match="block". Vì vậy, tôi không phải nêu rõ tên kernel. Nếu tôi thực hiện lệnh này một cách thủ công, việc quản lý nguồn được điều chỉnh chính xác nhưng nó không hoạt động từ dịch vụ systemd. Có cách nào để làm việc này không? btw Tôi đang sử dụng arch-linux

Câu trả lời:


2

Bạn có thể đặt một tập lệnh trong /usr/lib/systemd/systemd-sleepđó thực thi hdparm. Và bạn có thể sử dụng hdparm với /dev/disk/by-uuid/thay vì/dev/sda...

Hoặc cố gắng sử dụng /bin/sh -c "/bin/hdparm -B 200 /dev/disk/by-uuid/XY"


Cuối cùng tôi đã sử dụngExecStart= /bin/bash -c "/bin/udevadm trigger --subsystem-match='block'"
MoFu

1

Tôi đã ở trong tình huống gần như tương tự và muốn thêm thông tin cho câu hỏi này do sự nổi bật của nó trên Google systemd udevadm triggervà như một bản tóm tắt tổng thể về cách chế ngự các mặc định vô lý trong các ổ đĩa này.

Khi tôi nhận ra ổ đĩa Western Digital Blue của mình có tính bảo trợ, phản tác dụng, chống sức khỏe thông minh, vô nghĩa lãng phí năng lượng được bật theo mặc định, tôi đã thực hiện theo quy trình gần giống như OP. Tôi đã tắt tính năng phần sụn nhưng cũng cần thiết để vô hiệu hóa APM và chế độ chờ bằng cách sử dụng hdparm; không có cả 3, xe đạp tải tràn lan tiếp tục chạy điên cuồng.

Sự khác biệt đầu tiên là, bởi vì tôi hdparm.rulesđã được thiết lập để gọi trên thiết bị add chỉ (khởi động), udevadm triggersẽ không làm việc cho tôi, trừ khi tôi nói với nó kích hoạt để áp dụng, bằng cách thêm --action=add. Điều này mô phỏng hiệu quả việc không / cắm lại HD khi tiếp tục - đó chính xác là những gì tôi cần.

Nhưng tôi đã kết thúc với sự nhầm lẫn tương tự với OP, không thể hiểu tại sao tôi udevadm triggertải lại hdparm rulecông việc của mình trong thiết bị đầu cuối mà không phải từ a systemd service. Dường như tôi có những lý do khác nhau, đó là:

  1. Theo chúng tôi service, chúng tôi phải xác định rõ vị trí của tệp thực thi ExecStart /bin/udevadmvì các tệp đơn vị không nhận biết được $path;
  2. có lẽ .... Tôi đã cài đặt nó systemd/user, có thể đã chạy như tôi và do đó không nhận được các rootquyền cần thiết cho /sbin/hdparm.

(Tôi chạy Debian 8, nhưng tôi không tin bất kỳ thứ gì trong số này là dành riêng cho bản phân phối.)


1
fwiw, tôi đã ngừng sử dụng udevcho việc này, chuyển sang một systemddịch vụ được kích hoạt bởi boot và sau tất cả các hành động kiểu đình chỉ, điều này gọi hdparmcho tôi. Bằng cách này, tôi có thể quản lý tất cả ở một nơi - systemd- thay vì yêu cầu udevquy tắc khởi động và systemddịch vụ tiếp tục.
gạch dưới
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.