系统启动时执行一次的任何文件

是否每次操作系统启动时都会评估一次配置文件。 bashrc不符合条件,因为每次gnome终端启动时都会对其进行评估。

当我需要添加“run-once”命令时,我有两个地方使用:

每次用户登录后(无论是图形/ GDM还是文本/控制台登录): ~/.profile

优点:

  • 即使没有使用GDM / X11 /图形服务器,它也能工作。 这意味着它将适用于SSH和文本模式登录
  • 根据需要,在gnome终端启动时不会对其进行评估。 仅在登录时
  • 使用用户权限执行,安全,同时允许完全访问个人脚本。
  • 完成所有安装后运行,因此整个文件系统都可用。

缺点:

  • 如果用户登录,注销并再次登录,则每次登录时将再次执行。 所以它不仅仅是一个“真正的” 系统启动 。 但它可能适合您的需要。
  • 由于即使在文本模式登录中也会执行此操作,因此建议不要放置任何需要GDM / X11服务器的命令(如synergy守护程序)
  • Bash仅用于文本模式登录。 因此,如果使用GDM,脚本中不会接受任何bashisms,因为Ubuntu将使用dash运行它

一旦GDM启动(在任何用户登录之前): /etc/gdm/Init/Default

优点:

  • 无论有多少用户登录或退出,都只执行一次
  • 可用于文本和图形命令
  • 完成所有安装后运行,因此整个文件系统都可用。

缺点:

  • 使用gdm用户运行。 因此,个人脚本和它们的路径必须是世界可读和可执行的
  • 如果没有使用GDM服务器,则无法使用(duh)。 所以它不会在文本模式初创公司中运行
  • 同样,不要在bash中运行,因此必须避免使用bashisms。

使用适合您需要的方法。

cron在这里可以提供帮助。

除了在一分钟,一小时,一周,一周,一个月等时间开始,它还有一些特殊的操作:

 @reboot在启动时运行一次。
 @yearly每年运行一次,“0 0 1 1 *”。
 @annually(与@yearly相同)
 @monthly每月运行一次,“0 0 1 * *”。
 @weekly每周运行一次,“0 0 * * 0”。
 @daily每天跑一次,“0 0 * * *”。
 @midnight(与@daily相同)
 @hourly每小时运行一次,“0 * * * *”。

使用以下命令从命令行进行编辑:

sudo crontab -e

在文件的底部(在# mh dom mon dow command )你可以添加一行来执行你想要的行,这样@reboot /directory/to/file将在启动时执行/ directory / to / file。

只有一个警告:您需要确保该脚本没有输出或输出被重定向到文件(或/ dev / null),因为没有显示cron发送输出(它将结束操作)。

示例 sudo crontab -e

 #有关更多信息,请参阅crontab(5)和cron(8)的手册页
 # 
 PATH = / usr / sbin目录:在/ usr / bin中:/ sbin目录:/ bin中
 #mh dom mon dow命令
 @reboot / usr / bin / testscript

和…

 cd / usr / bin /
 sudo vi testscript 
 echo“works”> / tmp / testing
 chmod 775 testscript

现在重启……这是一个有效的例子:

  ls -l / tmp / testing
 -rw-r  -  r-- 1 root root 6 2011-05-29 08:34 / tmp / testing
 rinzwind @ discworld:/ tmp $ more / tmp / testing
作品

除了其他答案,您可以将启动(超级用户)命令放在/etc/rc.local

你看过cron工作吗? 您可以在crontab中的reboot @reboot中设置一个

只需将命令添加到/etc/rc.local 。 它在引导过程结束时执行一次。 确保退出时出现错误代码0。

 (0)asus-romano:~/PDF% cat /etc/rc.local #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. exit 0 

我在其他计算机上使用它,因为……因为……好吧,可能是1989年的Ultrix。你必须确保你的脚本可以作为root调用,没有图形界面。 测试它的方法是在根shell( sudo -i )中通过虚拟控制台(Ctrl-Alt-F1,Ctrl-Alt-F7返回到图形环境)运行它。

请注意,该shell中的错误命令可以完全破坏您的系统。

除了crontab解决方案之外:您可以通过非交互式方式(以root身份)执行此操作

 echo "@reboot /path/to/runonce-script.bash" | crontab 

并把这个脚本放进去

 crontab -r 

再次删除它。 否则,每次重启后都会执行脚本。