Điểm:0

Công việc định kỳ để tắt nguồn khi rút phích cắm AC không chạy

lá cờ in

Tôi đang cố chạy một tập lệnh bash đơn giản để tắt sổ ghi chép của tôi nếu nó không được cắm vào AC bằng một công việc định kỳ.

Kịch bản của tôi như sau:

#!/bin/bash

nếu ! on_ac_power; sau đó 
    tắt nguồn          
fi

Và tôi đã định cấu hình cron để chạy nó mỗi phút như sau:

*/1 * * * * /home/user/Documents/script.sh

Tập lệnh chỉ hoạt động tốt nếu tôi chạy thủ công, nhưng nếu không, nó dường như không có tác dụng trong cron.

Tôi đang thiếu gì ở đây?

lá cờ cn
Cron không phải là công cụ chính xác cho việc này. Những gì bạn muốn là một dịch vụ. `on_ac_power` là gì? nó không mang lại gì khi bật ac và khi không bật ac nên dường như vô dụng cho việc này. Và tắt nguồn, tôi sẽ thêm một thư mục vào.
lá cờ in
@Rinzwind `on_ac_power` kiểm tra xem máy tính có chạy bằng nguồn điện không. Thêm một thư mục để tắt nguồn, làm thế nào vậy? Như tôi đã nói, tập lệnh chỉ hoạt động tốt nếu tôi chạy nó theo cách thủ công, nhưng cron dường như không chạy nó.
lá cờ us
Ngoài nhận xét trước đó, `poweroff` nên yêu cầu quyền root; `sudo poweroff` có thể hoạt động nếu người dùng được đề cập không bắt buộc phải nhập mật khẩu. Tốt hơn hết, hãy đặt mục nhập cron vào `/etc/crontab` và chỉ định rằng nó sẽ được thực thi dưới dạng `root` (tất nhiên, trong trường hợp đó, tập lệnh cũng phải được chuyển đến một vị trí hợp lý).
Soren A avatar
lá cờ mx
@MarkusUeberall không bao giờ sử dụng `sudo` trong scripys và không bao giờ có thứ gì được chạy trong cron !! Thay vào đó, hãy chạy tập lệnh trong cron gốc nếu cần.
Soren A avatar
lá cờ mx
Nhân tiện, @MarkusUeberall, `poweroff` (/usr/sbin/poweroff) thích /bin/systemctl wgich có thể được thực thi bởi bất kỳ ai nên `sudo` dù sao cũng không cần thiết.
lá cờ us
@Soren A: `/bin/systemctl` _can_ được thực thi bởi bất kỳ ai, nhưng việc thực thi `poweroff` với tư cách là người dùng không phải root sẽ không nhất thiết hoạt động nếu người dùng khác đã đăng nhập (xem `poweroff -i`, điều mà tôi thực sự đã quên nêu trên); `sudo poweroff` _always_ hoạt động ngay lập tức.
Soren A avatar
lá cờ mx
@MarkusUeberall .. nhưng `sudo` không hoạt động trong crontab ... tập lệnh phải được chạy trong cron của root. Và đối với người dùng đã đăng nhập, hiếm khi có nhiều hơn một người dùng đăng nhập trên hệ thống gia đình. nhưng tất nhiên là một điểm cần lưu ý trên các hệ thống lớn hơn.
lá cờ us
@soren `Sudo` _does_ hoạt động trong crontab miễn là bạn không cần nhập mật khẩu (xem ví dụ: https://askubuntu.com/questions/796617/how-to-avoid-password-request-for-sudo -for-crontab-scripts); liệu có nên sử dụng nó cho trường hợp sử dụng của OP hay không là một câu hỏi khác (xem các nhận xét trước đây chỉ ra một dịch vụ và `/etc/crontab` giải quyết vấn đề này).
James S. avatar
lá cờ de
Vui lòng làm rõ, trong câu hỏi của bạn ở trên, toàn bộ lệnh bạn thực thi khi chạy lệnh theo cách thủ công, cũng như kết quả đầu ra từ ls hiển thị các quyền hệ thống tệp của tập lệnh.
Điểm:1
lá cờ in

Trước hết, tôi đã không chạy cron của mình dưới quyền root.

Rõ ràng để một cron chạy dưới quyền root, bạn phải thêm nó bằng Sudo crontab -e, bất cứ thứ gì được thêm chỉ với crontab -e sẽ không chạy như sudo.

Thứ hai như được chỉ ra trong tài liệu tham khảo:

Theo mặc định, cron chạy trong một môi trường rất hạn chế nên rất nhiều lệnh chạy qua tên lệnh từ thiết bị đầu cuối của người dùng cần có đường dẫn đầy đủ trong crontab hoặc khai báo ở đầu crontab để mở rộng đường dẫn.

Vì vậy, cuối cùng tôi đã thay thế tắt nguồn qua /sbin/tắt máy trong tập lệnh của tôi và bây giờ nó chạy như mong đợi.

#!/bin/bash

nếu ! on_ac_power; 
sau đó 
    /sbin/tắt máy        
fi

Thẩm quyền giải quyết

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.