系统启动时执行一次的任何文件
是否每次操作系统启动时都会评估一次配置文件。 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
再次删除它。 否则,每次重启后都会执行脚本。
- 如何使sudo记住我的密码以及如何将应用程序添加到启动
- 移动启动分区
- 文件错误/boot/grub/i386-pc/normal.mod试图修复启动,直播DVD安装问题
- 扩展我的Root Paritition
- 使用samsung 950 pro ssd的双启动窗口10 / ubuntu 16.04笔记本电脑上的Grub问题
- 该怎么办“/ dev / mapper / cryptswap1的磁盘驱动器还没有准备好或不存在”?
- 如何正确配置pxelinux.cfg / default以便从网络安装Ubuntu?
- 如何在启动时在通知区域中运行Tomboy?
- Ubuntu 12.04 NVIDIA GeForce Go 7600黑屏启动时