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


75

Tôi có một kịch bản mà tôi muốn chạy khi hệ thống của tôi khởi động. Tôi đã đặt nó trên "rc.local", nhưng nó không hoạt động. Làm thế nào tôi có thể kích hoạt nó để chạy khi khởi động?


1
Lệnh xsetwacom ở đâu? /etc/rc.local được thực thi với PATH rất đơn giản khi khởi động. Nó có thể khác với PATH mà bạn đã đăng nhập tại thiết bị đầu cuối. Trong thiết bị đầu cuối, gõ: gõ -p xsetwacom sau đó thay thế lệnh "xsetwacom" trong /etc/rc.local bằng đường dẫn đầy đủ được trả về bởi "type -p". Bạn có phải thực hiện bất kỳ khởi tạo thủ công nào trước khi xsetwacom làm việc cho bạn không?
ví von

3
Sử dụng systemd làm trình quản lý khởi động, đảm bảo khả năng tương thích systemctl status rc-local.service
RC.local

bình luận của waltinator là vấn đề của tôi. Do đường dẫn tối thiểu, nó không biết cách chạy các tập lệnh mà tôi muốn được chạy. Đường dẫn được tải trên hệ thống Ubuntu 14.04 của tôi tại thời điểm runninig /etc/rc.local là như sau: / sbin: / usr / sbin: / bin: / usr / bin ... bạn có thể kiểm tra của bạn bằng cách đưa echo $PATH > /home/rc_local_pathvào / etc / rc.local và sau đó kiểm tra tệp sau khi nó được chạy khi khởi động.
RaisinBranCrunch

Hãy nhớ rằng nếu tập lệnh của bạn cần chạy liên tục, bạn phải khởi động nó như một trình nền trong rc.localtệp!
totymedli

Sử dụng sudo systemctl enable rc-local.serviceđể đảm bảo /etc/rc.local được thực thi trong quá trình khởi động máy chủ
William

Câu trả lời:


56

Bạn có thể chạy tập lệnh của bạn bằng tay? Nếu không, đó là một vấn đề với kịch bản đó; mặt khác nhìn vào RC.local. (Nếu tập lệnh đó cần chạy bằng root, bạn cần sử dụng sudo để chạy thủ công.)

Đảm bảo /etc/rc.local có thể thực thi được và tập lệnh mà nó gọi cũng có thể thực thi được.

$ ls -l /etc/rc.local
-rwxr-xr-x 1 root root 419 2010-08-27 11:26 /etc/rc.local

Đảm bảo RC.local có một dòng shebang (là mặc định):

$ head -n1 /etc/rc.local
#!/bin/sh -e

Có, tôi có thể chạy tập lệnh bằng tay. Làm cách nào để đảm bảo /etc/rc.local có thể thực thi được? Tôi phải gõ gì? Có phải là "$ ls -l /etc/rc.local -rwxr-xr-x 1" không? Cảm ơn!
pedroo

@pedroo: Tôi đã sao chép chính xác những gì tôi thấy trong thiết bị đầu cuối của mình (để bạn thấy lời nhắc, đầu vào và đầu ra ở trên). Lệnh này là "ls -l /etc/rc.local" và nếu có thể thực thi được, nó sẽ có các X đó trong đầu ra.

3
Tôi đã thử "ls -l /etc/rc.local" và nó có thể thực thi được, nhưng tôi không thể làm cho nó chạy khi khởi động ... Có ý kiến ​​gì không?
pedroo

1
@pedroo: Điều đó cần máy chủ X chạy, điều này không xảy ra khi RC.local thực thi. Chạy nó từ RC.local sẽ chỉ khiến nó thoát ra mà không làm gì cả (mặc dù tôi hy vọng nó sẽ đặt một thông điệp trong syslog hoặc ở nơi khác). Bạn cần đặt các lệnh xsetwacom trong ~ / .xinitrc hoặc / etc / X / xinit / xinitrc thay thế.

1
@pedroo: Bởi vì RC.local chứa các lệnh dự định chạy vào một thời điểm khác nhau. Tạo một tệp mới, bạn có thể đặt nó vào ~ / bin , đánh dấu tệp có thể thực thi được (chmod hoặc thuộc tính trong Nautilus), tạo dòng đầu tiên "#! / Bin / bash", sau đó đặt các lệnh của bạn vào các dòng sau.

53

Trong trường hợp của tôi, không có hướng dẫn nào là một giải pháp hoàn hảo. Nếu bạn không may mắn như tôi, hãy thử chi tiết này

  1. Đặt tất cả mã thực thi của bạn vào một tệp văn bản riêng biệt với một tên tùy ý như foo.sh và lưu nó ở một nơi tùy ý.
  2. Thêm vào

    #!/bin/sh

    như dòng đầu tiên của mã của bạn.

  3. Hãy thử thực hiện foo.sh của bạn bằng cách

    sudo foo.sh

    để kiểm tra không có lỗi nào cả.

  4. Cung cấp tập lệnh /etc/rc.local của bạn với đường dẫn và tên đầy đủ của tập lệnh đã tạo sau lệnh sh

    sh '/path/to/your/script/foo.sh'
  5. Nhớ đặt dòng trên trước dòng mã cuối cùng

    exit 0

    ở cuối tập lệnh /etc/rc.local.

  6. Kiểm tra dòng đầu tiên của /etc/rc.local để được

    #!/bin/sh -e
  7. Làm cho /etc/rc.local của bạn có thể thực thi được trong trường hợp nó chưa được thực thi bởi

    sudo chown root /etc/rc.local
    sudo chmod 755 /etc/rc.local
  8. Kiểm tra mọi thứ hoạt động tốt bằng cách thực hiện

    sudo /etc/init.d/rc.local start
  9. Kiểm tra khởi động lại hệ thống của bạn.

6
Bước # 8 là chìa khóa, xác minh rằng tập lệnh sẽ chạy trong môi trường khởi động. Trong trường hợp của tôi, tôi cần đưa ra đường dẫn đầy đủ cho lệnh.
Peter Gluck

Hoàn hảo và từng bước để vĩ đại, nó hoạt động trên centos nhưng sudo /etc/rc.local startlần đầu tiên chạy.
A1Gard

Cảm ơn - sự cố này thực sự giúp ích cho tôi và như bước 8 ở trên cũng là chìa khóa cho tôi! Không có điều đó, nó sẽ không chuyển hướng +1 (để tham khảo, ứng dụng nút chạy trên máy chủ đám mây bitnami sử dụng mãi mãi để chạy liên tục).
fidev

Bước 8 là một mẹo hay, nhưng tôi nghĩ rằng bước 7 có thể là điều cố định của tôi, tôi đã cố chạy tập lệnh bằng cron để mở đường hầm nhưng nó đã thất bại một cách ngẫu nhiên
SeanClt

28

Trên các phiên bản Ubuntu mới hơn systemdđược sử dụng và /etc/rc.localkhông được tải luôn theo mặc định.

Kiểm tra xem dịch vụ Tương thích có được tải không

systemctl status rc-local.service

ảnh chụp màn hình

Nếu nó chứa hoạt động (đã thoát), cài đặt của bạn có vẻ ổn và bạn có thể có một lỗi khác trong /etc/rc.localtệp của mình (đây có thể là một lệnh không thành công).


4
nếu RC-local.service chưa được kích hoạt, hãy kiểm tra bài đăng này giải thích Cách bật /etc/rc.local với Systemd
yaitloutou

3

2 gợi ý.

  1. Đảm bảo rằng tệp tập lệnh đích cũng được đánh dấu thực thi.
  2. Là tập lệnh đích đang chạy một lệnh sudo ? Nếu vậy bạn có thể muốn cung cấp mật khẩu sudo cho nó.

Lỗi của tôi. Chỉ cần kiểm tra một cái rồi. Cảm ơn đã chỉnh sửa enzotib :)


8
rc.localđược chạy dưới quyền root, vì vậy không cần mật khẩu.
enzotib
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.