Chạy bash script khi khởi động


18

Tôi biết câu hỏi này đã được hỏi trước đây, nhưng tôi không thể tìm ra cách khắc phục cho vấn đề của mình, tôi chỉ không thể chạy tập lệnh của mình khi khởi động. Đây là kịch bản của tôi:

#!/bin/bash
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT 
iptables -A OUTPUT -m state --state NEW -p tcp --sport 22 -j ACCEPT

Tôi đặt nó vào /etc/init.dthư mục

Đảm bảo rằng nó có thể thực thi được bằng cách sử dụng chmod 755 /etc/init.d/iptables.sh

Và thực hiện touch /etc/rc3.d/S01iptables.sh

Nhưng không có gì :( ... Có đề xuất nào không?

[Tháng 11 năm 2017] Câu trả lời được chấp nhận ở đây nên được coi là lỗi thời, vui lòng xem /raspberrypi//a/75057/5538

Câu trả lời:


12

[Xin vui lòng xem ghi chú trong câu hỏi liên quan đến lỗi thời của câu trả lời này.]

Hãy thử sử dụng lệnh này để đảm bảo tập lệnh của bạn được thêm vào trình tự khởi động:

sudo update-rc.d /etc/init.d/nameofscript.sh defaults

Lưu ý rằng bạn có thể tạo tập lệnh thực thi bằng tùy chọn + x với chmod:

chmod +x /etc/init.d/nameofscript.sh

1
Vâng, update-rc.dlệnh đã hoạt động: D ... Tôi đã sử dụng nó trước đây, nhưng dường như nó chỉ trả về một lỗi, vì vậy tôi đã bỏ qua nó Lol ... Cảm ơn vì sự giúp đỡ: D

5
Nó sẽ là sudo update-rc.d nameofscript.sh defaults, ít nhất là trên Jessie, để tránh update-rc.d: error: initscript does not exist: /etc/init.d//etc/init.d/nameofscript.sh.
derFunk

Liệu kịch bản này có phải kết thúc trong một thời gian hợp lý? Hoặc nó có thể được sử dụng để lặp một video cho vô hạn chẳng hạn?
clankill3r

17

Bạn cũng có thể thiết lập một cronjob ( xem hướng dẫn ) để làm cho nó chạy khi khởi động

(sudo) crontab -e

chỉ thêm sudonếu tập lệnh của bạn cần đặc quyền siêu người dùng. Sau đó thêm phần này vào crontab của bạn:

@reboot /path/to/script.sh

Tôi đã sử dụng phương pháp này để khởi chạy một tập lệnh và nó tắt tất cả quyền truy cập ssh vì một số lý do. Tôi đã phải gắn ổ đĩa trên một thiết bị linux khác và nhận xét dòng crontab.
Phill Healey

6

Bạn có thể thêm lệnh thực thi tập lệnh của mình vào cuối lệnh .bashrcsẽ chạy tập lệnh của bạn mỗi khi bạn đăng nhập .

  1. Hãy chắc chắn rằng bạn đang ở trong pithư mục:

    $ cd ~
    
  2. Tạo một tệp và viết một tập lệnh để chạy trong tệp:

    $ sudo nano superscript
    
  3. Lưu và thoát: Ctrl+ X, Y,Enter

  4. Mở ra .bashrcđể cấu hình:

    $ sudo nano .bashrc
    
  5. Cuộn xuống phía dưới và thêm dòng: ./superscript

  6. Lưu và thoát: Ctrl+ X, Y,Enter


Nếu bạn đang tìm kiếm một giải pháp hoạt động khi khởi động lên bàn điều khiển , hãy xem liên kết này . Danh sách cơ bản:

  1. Tạo một tệp cho tập lệnh khởi động của bạn và viết tập lệnh của bạn vào tệp:

    $ sudo nano /etc/init.d/superscript
    
  2. Lưu và thoát: Ctrl+ X, Y,Enter

  3. Làm cho tập lệnh thực thi:

    $ sudo chmod 755 /etc/init.d/superscript
    
  4. Đăng ký tập lệnh để được chạy khi khởi động:

    $ sudo update-rc.d superscript defaults
    

Nếu bạn muốn tập lệnh chạy khi bạn khởi động vào môi trường LXDE , bạn có thể xem bài đăng trên diễn đàn Raspberry Pi này :

  1. Hướng đến ~/.config/lxsession/LXDE-pi

  2. Mở autostarttệp trong thư mục đó:

    $ sudo nano autostart
    
  3. Thêm @bash /path/to/scriptname &vào một dòng mới. Nếu bạn muốn chạy một cái gì đó như một kịch bản python, hãy đặt một cái gì đó như @python mypython.pytrên một dòng mới. Chạy một tập tin tập lệnh sẽ được @./superscript, nhưng vì một số lý do, tập lệnh chạy trong một vòng lặp vô hạn (có lẽ điều này sẽ ngăn chặn điều đó).

  4. Lưu và thoát: Ctrl+ X, Y,Enter

  5. Khởi động lại Raspberry Pi của bạn vào môi trường LXDE.

lấy từ thực thi kịch bản khi khởi động


1

Tôi thường chỉ thêm dòng để thực thi tập lệnh /etc/rc.local, ví dụ /path/to/my/script.sh &, trước dòng cuối cùng có exit 0. Tôi đã thêm "&" để gửi tập lệnh tới nền trong trường hợp nó không trả về, nếu không các lệnh tiếp theo sẽ không được thực thi.

Vì vậy, trong trường hợp của bạn, tôi chỉ cần thêm hai dòng

iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT 
iptables -A OUTPUT -m state --state NEW -p tcp --sport 22 -j ACCEPT

vào cuối của /etc/rc.localchỉ trước exit 0.

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.