在Linux ubuntu下启动时自动运行程序


140

每次启动ubuntu linux时,我都需要运行一个程序。因此,我需要将其添加到我的启动程序列表中。只是一个问题:我需要通过终端来完成。



23
@Flexo您提供的两个链接中都没有此答案。+1和这个问题和答案
弗朗西斯科·瓦尔迪兹

2
实际上,这里的答案是从第一个问题中引用的。
威尔逊F

4
对于执行此操作的简单,可移植的方法,可以使用Cron。运行crontab -e以编辑用户的crontab;添加@reboot commandcommand在每次启动时运行。
appas

2
我不知道它是否重复,但这是第一个谷歌命中率
。–弗拉基米尔·弗雷格

Answers:


178
sudo mv /filename /etc/init.d/
sudo chmod +x /etc/init.d/filename 
sudo update-rc.d filename defaults 

脚本现在应该在启动时启动。请注意,此方法也适用于硬链接和符号链接(ln)。

编辑

在引导过程中,目前尚未设置PATH,因此在整个过程中使用绝对路径至关重要。但是,正如Steve HHH的评论所指出的那样,显式声明/etc/init.d/filenameupdate-rc.d命令的完整文件路径()在大多数Linux版本中无效。根据update-rc.d联机帮助页,第二个参数是位于中的脚本/etc/init.d/*。更新了上面的代码以反映这一点。

另一个编辑

同样,正如评论中指出的(查尔斯·布兰德(Charles Brandt)),它/filename必须是一个初始化样式脚本。还提供了一个很好的模板-https: //github.com/fhd/init-script-template

另一篇文章的另一个链接只是为了避免可能的链接腐烂(尽管如果GitHub死亡,这会令人伤心)-http: //www.linux.com/learn/tutorials/442412-managing-linux-daemons-with-init-scripts

另一个编辑

正如评论中指出的那样(Russell Yan),这仅适用于update-rc.d的默认模式。

根据update-rc.d的手册,它可以在两种模式下运行,“使用旧模式的计算机将具有一个文件/etc/init.d/.legacy-bootordering”,在这种情况下,您必须通过命令行参数传递序列和运行级别配置。

上例中设置的等效参数为

sudo update-rc.d filename start 20 2 3 4 5 . stop 20 0 1 6 .


1
正如一个供参考,选项“默认值”放一个链接来启动在运行级别2,3,4和5的脚本(并提出一个链接到停止在0,1和6)
戴夫Lasley

5
我只是在Ubuntu Server 12.04 LTS中尝试过此操作,但是在12.04中您不能使用/etc/init.d前缀。只是sudo update-rc.d filename defaults
史蒂夫HHH

1
@puk硬链接和符号链接会用这种方法工作
戴夫Lasley

14
只想在这种情况下添加/ filename应该是一个初始化样式脚本。这是用于启动您自己的自定义初始化脚本的模板:github.com/fhd/init-script-template
Charles Brandt

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.