我已经调查了Upstart,但我正在努力了解它是如何工作的。当我测试它们时,我尝试过的所有脚本都无法正常工作。
#1 楼
此答案已过时-甚至包含编写时也包含错误的方法。 />要在启动时运行Midori,请看一下本教程。有关DIY解决方案,请继续阅读。
您可以将脚本可执行命令添加到
.bashrc
的底部,该命令将在每次打开终端时运行脚本(或运行bash
的新实例) 。请确保您位于
pi
文件夹中:$ cd ~
创建文件并编写脚本以在文件中运行:
$ sudo nano superscript
保存并退出:Ctrl + X,Y,输入
打开
.bashrc
进行配置:.bashrc
并非旨在运行脚本。每次启动非登录交互式外壳程序时都会运行该脚本,并用于配置该外壳程序。
~/.bashrc: executed by bash(1) for non-login shells
。 $ sudo nano .bashrc
向下滚动到底部并添加以下行:
./superscript
保存并退出:Ctrl + X,是,请输入
如果您正在寻找可在控制台启动时使用的解决方案,请查看此链接。基本清单:
为启动脚本创建一个文件,并将脚本写入该文件:
$ sudo nano /etc/init.d/superscript
保存并退出:Ctrl + X,Y,输入
使脚本可执行:在启动时运行:
$ sudo chmod 755 /etc/init.d/superscript
如果希望在启动LXDE环境时运行脚本,可以看一下此Raspberry Pi论坛帖子:
导航到
~/.config/lxsession/LXDE-pi
打开该文件夹中的
autostart
文件:$ sudo update-rc.d superscript defaults
在新行上添加
@midori
。如果要运行类似python脚本的内容,请在新行上放置类似@python mypython.py
的内容。运行脚本文件将是@./superscript
,但是由于某种原因,脚本会无限循环运行(也许这会停止该循环)。保存并退出:Ctrl + X,Y,Enter
重新启动Raspberry Pi进入LXDE环境。
评论
我在寻找有关在启动时设置Midori的教程。不知道为什么有这么多方法可以做这种简单的事情,但是我很高兴它现在可以工作了。
–泰勒·穆里(Tyler Murry)
13年8月2日在1:44
@ syb0rg如果我通过ssh登录,则登录时运行的部分就像超级按钮(+1)一样工作,但是当lxde桌面会话启动时却不能。有没有办法做到这一点 ?
–乔治·普罗恩扎(George Profenza)
2013年9月13日19:50在
@GeorgeProfenza什么时候做$ sudo startx?
–syb0rg
2013年9月13日23:01
只是想指出pyhton脚本将运行,但是如果有任何错误,使用/ etc / xdg / lxsession / LXDE / autostart方法,它将只在后台某处。使用.barshrc也会显示错误,但是确保脚本一开始就很紧是非常重要的(很难找到):)
–乔治·普罗恩扎(George Profenza)
2013年9月25日,下午1:23
当系统启动或用户登录时,仅在打开新终端时才会读取.bashrc(每次用户打开新终端时都将读取.bashrc)。我很困惑这个答案有这么多反对:第一部分是完全错误的。第三部分正确执行GUI程序。
–吉尔斯'所以-不再是邪恶的'
16年7月15日在1:19
#2 楼
我见过的大多数人都这样做(在Raspberry Pi论坛上看过),并且成功完成了自己的工作,就是使用/etc/rc.local
。这里您需要做的就是将
./myscript
放入rc.local文本文件。如果是在python中,请输入python myscript.py
。也有疑问,此解决方案出现在Google搜索的前4个结果中!评论
仅供参考,默认情况下,rc.local具有有关脚本的各种注释,这些注释不执行任何操作且需要更改可执行位。这是不正确的,只需在退出0之前输入脚本命令,它将在启动时运行。确保您的脚本在后台退出运行,否则它将阻止登录提示。是的,那就是我所做的。
– rob
2014年11月20日在22:41
参见raspberry-projects.com/pi/pi-operating-systems/raspbian/…
–乔治·比尔比利斯(George Birbilis)
15年7月3日在17:40
@rob您是说他们建议将该脚本设置为可执行文件吗?通过使用命令python myscript.py运行脚本可以缓解此问题。如果要chmod + x并添加#! / bin / python,您可以通过执行$ pathtofile / myscript.py来运行脚本,其中$ pathtofile是。如果您位于同一目录中,或者文件的绝对或相对路径。
– JFA
15-10-29在8:46
对于诸如浏览器之类的GUI程序来说,这没有好处。 /etc/rc.local仅用于启动系统服务(没有用户界面的程序)。
–吉尔斯'所以-不再是邪恶的'
16年7月15日在1:19
@ ErickM.Sprengel在此线程上使用正确的答案之一,例如此答案。
–吉尔斯'所以-不再是邪恶的'
17年9月2日在19:19
#3 楼
将其添加到crontabcrontab在定义的时间运行命令。
编辑文件:
sudo crontab -e
将行添加到文件(此处为python脚本):
@reboot python3 /home/pi/Desktop/exemple.py &
评论
对此,请注意,从技术上讲,不是crontab运行命令,而是无论如何。关于要添加的列出行,建议为此处定义的命令放置完整路径(在这种情况下,为python3的完整路径),请参见此处
–加纳马♦
16年3月28日在20:39
由于其简单性,这是我一直使用的方法。 +1
–帕特里克·库克(Patrick Cook)
16年5月7日在19:42
对于诸如浏览器之类的GUI程序来说,这没有好处。 /etc/rc.local仅用于启动没有用户界面的程序。
–吉尔斯'所以-不再是邪恶的'
16年7月15日在1:20
在花了很多时间尝试使它与rc.local和init.d以及其他各种各样的东西一起工作之后。谢谢分配!
– Piotr Kula
17年12月1日下午14:58
这在rpi os中由于某种原因不起作用
–丹尼斯
18年7月20日在10:27
#4 楼
自动启动xorg应用程序如果要启动的脚本需要xorg会话,则可以尝试遵循freedesktop autostart规范,该规范可能会或可能不起作用,具体取决于您所使用的桌面环境。
或者,您可以按照https://wiki.archlinux.org/index.php/autostarting中的描述定位特定的桌面环境。
将脚本作为系统服务运行
如果脚本适合守护程序或“服务”的描述,并且系统正在运行systemd(对于raspbian和大多数现代linuce都是这种情况),则可以将脚本配置为作为systemd服务运行-这提供了对生命周期和执行环境以及(重新)启动脚本的前提条件(例如,网络正在运行)的精细控制。如果发生系统故障(
Restart=always
和重启之间的延迟,例如RestartSec=10
),也可以配置服务重启。要在系统范围内使用,请在
/etc/systemd/system
下创建systemd单元文件,例如与vim /etc/systemd/system/autossh.service
在一起: [Unit]
Description=Autossh keepalive daemon
## make sure we only start the service after network is up
Wants=network-online.target
After=network.target
[Service]
## use 'Type=forking' if the service backgrounds itself
## other values are Type=simple (default) and Type=oneshot
Type=forking
## here we can set custom environment variables
Environment=AUTOSSH_GATETIME=0
Environment=AUTOSSH_PORT=0
ExecStart=/usr/local/bin/ssh-keep-alive.sh
ExecStop=/usr/bin/killall -9 autossh
### NOTE: you can have multiple `ExecStop` lines
ExecStop=/usr/bin/killall ssh
# don't use 'nobody' if your script needs to access user files
# (if User is not set the service will run as root)
#User=nobody
# Useful during debugging; remove it once the service is working
StandardOutput=console
[Install]
WantedBy=multi-user.target
另请参见:
[
unit
]配置[
service
]配置现在我们准备测试服务:
systemctl start autossh
检查服务状态:
systemctl status autossh
停止服务:
systemctl stop autossh
一旦您确认该服务能够按预期工作,请使用以下功能启用它:
systemctl enable autossh
注意:为了安全起见,
systemd
将在受限环境中运行脚本,类似于crontab
脚本的运行方式,因此,请勿对现有的系统变量做任何假设。如果您的脚本需要定义特定的变量,请使用Environment
键。在bash脚本的顶部添加set -x
,然后运行systemctl status my_service
,可能有助于确定脚本失败的原因。通常,始终对所有内容使用绝对路径,包括echo
和cat
,或显式定义您的$ PATH。#5 楼
我想投入两分钱,尽管这是一个老问题,但通常被要求做简单的事情-自动启动。我针对该问题在所有答案中尝试了所有建议的解决方案。他们都没有为我工作。我正在将Raspberry PI Model 2与Raspbian一起使用。使脚本成功自动启动的唯一方法是通过脚本,如下所示。我说成功是因为我的应用程序按预期方式启动,而没有像以错误的工作路径开头那样的任何问题。
1.创建一个扩展名为.sh的空文件并命名为您想要的任何名称。 br /> 2。完全复制并粘贴以下内容,只是将“您的应用程序名称”更改为刚创建的脚本名称。
#! /bin/sh
### BEGIN INIT INFO
# Provides: noip
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Simple script to start a program at boot
### END INIT INFO
#change /direct/path/to/your/application to the path your application is in.
cd /direct/path/to/your/application # example cd /home/pi/myprogram/
#change YourProgramExactName to Exact name of your program that you want to auto start
./YourProgramExactName
exit 0
然后,将脚本文件保存在应用程序文件夹中
,然后打开
/home/pi/.config/autostart
文件夹。您的情况可能有所不同。只需打开您的主文件夹并启用查看隐藏的文件夹。打开.config/autostart
。如果没有看到自动启动文件夹,请在.config文件夹中创建一个名为自动启动的文件夹。在自动启动文件夹中,您将需要创建到脚本文件的快捷方式,该脚本文件的创建如下。创建一个扩展名为
.desktop
的空文件。将以下内容复制并粘贴到空桌面文件中,除非您需要更改
Comment
,Name
,Exec
,Path
和Icon
字段的值。[Desktop Entry]
Comment=
Exec=/path/to/Your/application/Name-of-the-script-file (.sh)
Icon=/Path/to/Your/application/Icon/IconName
Name=YourApplicationEXACTNAME
Path=/Path/to/Your/Application-ONLY
Type=Application
更改所有必要字段后,保存并关闭文件。大功告成只需对其进行测试。
注意:这使脚本符合Debian LSBInit:
评论
从技术上讲,此脚本由系统而不是特定用户运行-因此,您的应用程序最好属于/ usr / local / bin / ApplicationName ...?
– SlySven
17年2月11日在11:36
@SlySven“系统”是特定用户。
–lmat-恢复莫妮卡
18年11月13日在11:17
它是以root用户(UID = 0)还是pi用户(UID〜500或1000 IIRC)运行-如果它是以root用户或另一个系统UID(小于500)运行,则传统上最好的做法是存储脚本文件(或它所依赖的任何设备)在根设备上,以便在其他任何设备(例如家庭设备,如果是单独的设备)存在问题的情况下,脚本(或可执行文件)不可用时也不会出现问题系统故障回到单个用户/ bin / sh shell!如今,系统化的方法是在启动PID 1之前先挂载/和/ usr。
– SlySven
18/12/11在22:23
#6 楼
我对此也有麻烦。在运行Raspbian的Raspberry Pi3上,这就是我所做的:在您的根目录中创建启动shell脚本(我将其命名为“ launch”):
sudo leafpad launch.sh
保存文件
编辑LXDE-pi自动启动文件
sudo leafpad /home/pi/.config/lxsession/LXDE-pi/autostart
将此添加到该文件的底部
./launch.sh
重新启动
评论
不要这样做,如果长时间运行该命令可能会中断启动
– Kaan Soral
6月28日16:11
这就是发生的情况:raspberrypi.org/forums/…这是解决方法:raspberrypi.stackexchange.com/a/70527/121533
– Kaan Soral
6月28日下午16:34
#7 楼
新方法-RASPBERRY PI OS。也可以在其他版本上使用。
创建桌面文件
xyz.desktop
在其中键入以下内容
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=<Application Name Goes here>
Comment=
Exec= python /home/pi/Desktop/execute_on_boot.py
StartupNotify=false
Terminal=true
Hidden=false
将此文件粘贴到
/home/pi/.config/autostart/
,然后重新启动树莓派,它将自动在新终端上运行程序。
旧方法-RASBIAN STRETCH
在运行Raspbian的Raspberry Pi3上拉伸一下我所做的事情:
编辑LXDE-pi自动启动文件
sudo nano /home/pi/.config/lxsession/LXDE-pi/autostart
将此添加到该文件的底部
@sudo python3 /path/to/your/script.py
保存并重新启动
评论
不要这样做,如果长时间运行该命令可能会中断引导-您需要通过引导到命令行来手动修复它:(
– Kaan Soral
6月28日16:11
实际上,Raspberry Pi OS不支持此方法,它将使用更新的信息来编辑我的答案。
– Amr Sohil
6月29日21:20
这是我找到的最佳解决方案!我一直在寻找几个小时的好方法。所有其他方式要么根本不起作用,要么真的被推迟了。此解决方案在桌面加载后立即启动程序。谢谢!
–兰迪
9月25日下午16:33
太好了,很高兴能够提供帮助:)
– Amr Sohil
9月26日下午17:21
#8 楼
方法1:要在登录时自动启动命令,请将命令放入用户目录中名为
.bashrc
的文件中(例如/ home / pi)
.bashrc
并非旨在运行脚本。每次启动非登录交互式shell时都会运行该脚本,并用于配置外壳。
~/.bashrc: executed by bash(1) for non-login shells
。例如,该文件可能包含
.com
方法2:
此解决方案非常有效。浏览器加载后,屏幕左上方会出现一个黑色小方块,这似乎是一个常规错误(其他人在论坛上提到过),但全屏模式会隐藏浏览器页面以外的所有内容。
编辑自动启动文件:
chromium-browser --kiosk www.google.com
在每行的开头使用“#”注释所有内容,然后添加以下行
自动运行浏览器
sudo nano /etc/xdg/lxsession/LXDE/autostart
如有必要,使用配置工具在加电时启用GUI的自动运行
@xset s off
@xset -dpms
@xset s noblank
@midori -e Fullscreen -a http://google.com
如果需要返回到命令提示符,请按
CTRL + ALT + F1
CTRL + ALT + F2
#9 楼
您可以将脚本放在/etc/profile
文件的底部。其他选项对我不起作用,但这可能是因为我将脚本放在了桌面上。
#10 楼
使用命令'python /path/to/your/script.py'创建一个.sh文件键入'sudo nano /etc/rc.local'并键入.sh文件的路径
之前
exit 0
或者您可以只键入
crontab -e
或
sudo crontab -e
如果要在启动时运行脚本,请在
@reboot python /path/to/your/script.py &
文件类型内运行
评论
强烈建议对crontab条目使用完整路径!
–加纳马♦
2016年9月6日14:23在
#11 楼
有用。 (在每次重新引导时,它会自动准备以下提交)$ cat /etc/rc.local
#!/bin/sh -e
echo "18" > /sys/class/gpio/export
echo "out" > /sys/class/gpio/gpio18/direction
echo "1" > /sys/class/gpio/gpio18/value
exit 0
#12 楼
这通常是我要做的。将文件存储在raspberry pi主目录中。例如:mycode.py
编辑文件:
sudo nano .bashrc
不打算运行脚本。 每次启动非登录交互式外壳程序时都会运行它,并用于配置外壳程序。
.bashrc
。转到文件末尾并写入:
~/.bashrc: executed by bash(1) for non-login shells
如果要将输出存储在txt文件中,请按如下所示在步骤3中编辑代码:
评论
您正在运行什么操作系统?在我正在Pi上使用的FreeBSD中,您可以将启动脚本添加到/usr/local/etc/rc.d/,或者仅将内容添加到/etc/rc.local。不同的Linux发行版具有不同的推荐方法。如果要在其上运行X,则应考虑将其添加到.xinitrc或.xsession文件中。有关X启动过程的更多信息,请参见此处。
请注意,此处接受的答案有一些警告,从技术上讲,除非在特定条件下,否则在启动时不会启动任何操作。请仔细阅读。
您要的是一个在登录时运行的脚本,而不是在pi启动或启动时运行的脚本。两件事截然不同,标题使Google搜索结果倾斜。
如果要在启动时自动启动node.js脚本,请使用pm2。专为此设计的;用于在启动时运行脚本,在日志文件中跟踪其stdout和stderr,重新启动脚本等。