Làm thế nào tôi có thể chạy một lệnh sau khi khởi động?


27

Tôi muốn chạy lệnh shell đơn giản echo 1 > /proc/sys/kernel/sysrqtại mỗi lần khởi động, để kích hoạt các phím sysrq. Khi khởi động nên được thực hiện, và tôi nên đặt một kịch bản để làm điều đó ở đâu?


Tất cả các bản phân phối Linux đã đặt thời gian. Có lẽ pin để RTC của bạn trên bo mạch chủ thấp?
Một số lập trình viên anh chàng

@JoachimPileborg thực sự không có RTC trên bo mạch chủ của tôi :) Đó là bảng hệ thống nhúng không có RTC.


2
Tôi xin khác, @davidgo. Các tài liệu tham khảo mà bạn đang trích dẫn là một lỗi thời: trong khi crontab không hoạt động, /etc/rc.local không có trên systemdcác bản phân phối như Arch Linux. Bằng cách đề cập đến họ, chúng tôi có thể gửi Demetri vào một cuộc săn đuổi ngỗng hoang dã. Một số cập nhật, đôi khi, cần phải được thực hiện.
MariusMatutiae

Câu trả lời:


37

Phụ thuộc vào distro.

Nếu bạn đang ở trên các bản phát hành có nguồn gốc từ Debian, có ít nhất hai vị trí thích hợp là /etc/rc.local và crontab. Bạn có thể gọi crontab là root,

   crontab -e

và sau đó chèn dòng này

   @reboot /home/my_name/bin/my_command

trong đó my_commandmột tập tin thực thi ( chmod 755 my_command).

Ngoài ra, bạn có thể đặt một dòng như thế này

   /home/my_name/bin/my_command

trong /etc/rc.local và điều này sẽ được thực hiện sau cùng. Trong mọi trường hợp, xin vui lòng nhớ rằng bạn đang sử dụng môi trường root, không phải của bạn. Cũng vì lý do này, tốt nhất là sử dụng các đường dẫn tuyệt đối.

Nếu bạn đang sử dụng bản phân phối hệ thống (Arch Linux, Fedora 19, ...) thì tùy chọn đầu tiên (crontab) vẫn còn hiệu lực, trong khi tùy chọn thứ hai (/etc/rc.local) không còn tồn tại nữa. Trong trường hợp này, bạn nên tìm hiểu làm thế nào để bắt đầu một dịch vụ được điều hành systemctl, nhưng điều này có thể nhiều hơn bạn mặc cả với câu hỏi đơn giản của bạn.


1
Bạn có thể xác nhận điều này cho Fedora? Việc tìm kiếm của tôi cho tôi biết rằng RC.local vẫn sẽ chạy nếu nó tồn tại và có thể thực thi được, nhưng không được thiết lập theo mặc định. Tôi nhận thấy sự phân nhánh rắc rối nếu RC.local không chạy! (Tôi chỉ có thể tìm tài liệu tham khảo cho việc này cho Fedora 18 - forums.fedoraforum.org/showthread.php?t=291889 )
davidgo

Bạn đã đúng, trong Fedora 19 bạn vẫn có thể có nó, nếu bạn thực sự muốn nó. Nhưng nó không còn được đóng gói nữa, docs.fedoraproject.org/en-US/Fedora/16/html/Release_Notes/ nam đạn 3.2.4. Ngoài ra, nó không tồn tại hoàn toàn trong Arch Linux, vì vậy tôi nghĩ sẽ an toàn khi đưa vào cảnh báo về điều đó.
MariusMatutiae

2
có thể đây là một bí danh chưa biết đối với tôi nhưng @bootkhông tồn tại, chỉ là @reboot debianhelp.co.uk/crontab.htm
Zarathustra

19

Nếu hệ thống của bạn đang chạy phiên bản cronhỗ trợ nó (cụ thể là Vixie cron), bạn có thể sử dụng @reboottrong công việc định kỳ.

Đây là một trong 8 chuỗi đặc biệt mà nó hỗ trợ.

Trích dẫn crontab(5)trang man (từ hệ thống Ubuntu 12.04 của tôi):

Thay vì năm trường đầu tiên, một trong tám chuỗi đặc biệt có thể xuất hiện:

string         meaning
------         -------
@reboot        Run once, at startup.
@yearly        Run once a year, "0 0 1 1 *".
@annually      (same as @yearly)
@monthly       Run once a month, "0 0 1 * *".
@weekly        Run once a week, "0 0 * * 0".
@daily         Run once a day, "0 0 * * *".
@midnight      (same as @daily)
@hourly        Run once an hour, "0 * * * *".

Xin lưu ý rằng khởi động, theo như @rebootcó liên quan, là thời điểm khởi động cron (8) . Đặc biệt, có thể là trước khi một số trình nền hệ thống, hoặc các cơ sở khác, được khởi động. Điều này là do trình tự khởi động của máy.

Đây không phải là cách duy nhất để chạy một cái gì đó khi khởi động, nhưng nó là một cách khác.


2
Làm thế nào câu trả lời này có thể được viết hơn một năm trước câu hỏi ban đầu?
MariusMatutiae


+1 để chỉ định yêu cầu cron Vixie.
Javier Arias

10

Khá nhiều biến thể của Linux (quay lại từ lâu, rất lâu) có tệp /etc/rc.local chạy khi khởi động - bạn chỉ cần thêm lệnh vào nó.

Điều đó nói rằng, bạn thậm chí không cần phải làm điều đó. Cách "chính xác" sẽ là sửa đổi / thêm dòng kernel.sysrq = 1 vào /etc/sysctl.conf

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.