我知道这个问题以前曾被问过,但我找不到解决问题的方法,只是无法让脚本在启动时运行。这是我的脚本:

#!/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


我将其放入/etc/init.d目录中

通过使用chmod 755 /etc/init.d/iptables.sh确保它具有可执行文件

并完成touch /etc/rc3.d/S01iptables.sh

但是什么都没有:( ...有什么建议吗?


[2017年11月]这里接受的答案应该被认为已经过时,请参阅https://raspberrypi.stackexchange.com/a/75057/5538


#1 楼


[请参阅问题中有关此答案已过时的注释。]


尝试使用此命令来确保将脚本添加到引导顺序中:

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


请注意,您可以使用带有chmod的+ x选项使脚本可执行:

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


评论


是的,update-rc.d命令起作用:D ...我以前用过,但是它似乎只是返回一个错误,所以我忽略了它大声笑...感谢您的帮助:D

– anon
2014年4月25日在23:46

至少在Jessie上,这将是sudo update-rc.d nameofscript.sh的默认值,以避免update-rc.d:错误:初始化脚本不存在:/etc/init.d//etc/init.d/nameofscript。 sh。

– derFunk
15年11月30日在17:05

该脚本是否必须在合理时间内结束?还是可以将其用于无限循环视频?

–clankill3r
17年5月1日在11:18

#2 楼

您还可以设置一个cronjob(请参阅教程),使其在启动时运行。
(sudo) crontab -e


如果脚本需要超级用户特权,则仅添加sudo。然后将其添加到您的crontab中:

@reboot /path/to/script.sh


评论


我使用此方法启动脚本,由于某种原因它关闭了所有ssh访问。我必须将驱动器安装在另一个Linux设备上,并注释掉crontab行。

– Phill Healey
20年1月6日在18:41

#3 楼

您可以将脚本可执行命令添加到.bashrc的底部,该命令将在每次登录时运行脚本。



请确保您位于pi文件夹中:

$ cd ~



创建文件并编写脚本以在文件中运行:

$ sudo nano superscript


保存并退出:Ctrl + X,Y,输入

打开.bashrc进行配置:

$ sudo nano .bashrc


向下滚动到底部并添加该行:./superscript
保存并退出:Ctrl + X,Y,Enter


如果您正在寻找可用于启动控制台的解决方案,请查看此链接。基本清单:



为启动脚本创建一个文件,并将脚本写入该文件:

$ sudo nano /etc/init.d/superscript


保存并退出:Ctrl + X,Y,输入

使脚本可执行:

$ sudo chmod 755 /etc/init.d/superscript



将脚本注册为在启动时运行:

$ sudo update-rc.d superscript defaults




如果希望在启动LXDE环境时运行脚本,可以看一下此Raspberry Pi论坛帖子:


导航到~/.config/lxsession/LXDE-pi

打开该文件夹中的autostart文件:

$ sudo nano autostart


在新行中添加@bash /path/to/scriptname &。如果要运行类似python脚本的内容,请在新行上放置类似@python mypython.py的内容。运行脚本文件将是@./superscript,但是由于某种原因,脚本会无限循环运行(也许这会停止该循环)。
保存并退出:Ctrl + X,Y,Enter
重新启动Raspberry Pi进入LXDE环境。

源自启动时的Execute脚本

#4 楼

我通常只添加一行以执行/etc/rc.local中的脚本,例如/path/to/my/script.sh &,在具有exit 0的最后一行之前。我添加了“&”,以便在脚本不返回时将其发送到后台,否则将不执行下一个命令。

因此,在您的情况下,我只需添加两行

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


/etc/rc.local末尾的exit 0末尾。

#5 楼

首先为我创建脚本
,将startup_file.sh移至
,将startup_file.sh移至/etc/init.d/
,确保该脚本可通过以下命令执行:
sudo chmod +x /etc/init.d/startup_file.sh
现在使用此命令:
sudo update-rc.d startup_file.sh defaults
这是由goldilocks建议的:
sudo update-rc.d /etc/init.d/startup_file.sh defaults;对我没用!
只尝试两个应该工作的其中一个