详解在 Linux 启动时,如何自动执行命令或脚本

我一直很好奇,在启动 Linux 系统并登录的过程中到底发生了什么事情。按下开机键或启动一个虚拟机,你就启动了一系列事件,之后会进入到一个功能完备的系统中,有时,这个过程不到一分钟。当你注销或者关机时,也是这样。

更有意思的是,在系统启动以及用户登录或注销时,还可以让系统执行特定的操作。

本文,我们将探讨一下在 Linux 操作系统中实现这些目标的传统方法。

注意:我们假定使用的是 Bash 作为登录及注销的主 Shell。如果你使用的是其他 Shell,那么有些方法可能会无效。如果有其他的疑问,请参考对应的 Shell 文档。

在启动时执行 Linux 脚本

有两种传统的方法可以实现在启动时执行命令或脚本:

方法 #1 - 使用 cron 任务

除了常用格式(分 / 时 / 日 / 月 / 周)外,cron 调度器还支持 @reboot 指令。这个指令后面的参数是脚本(启动时要执行的那个脚本)的绝对路径。然而,这种方法需要注意两点:

  • a) cron 守护进程必须处于运行状态(通常情况下都会运行),同时
  • b) 脚本或 crontab 文件必须包含需要的环境变量(如果有的话,参考 StackOverflow 获取更多详细内容)。

方法 #2 - 使用 /etc/rc.d/rc.local

这个方法对于 systemd-based 发行版 Linux 同样有效。不过,使用这个方法,需要授予/etc/rc.d/rc.local文件执行权限:

# chmod +x /etc/rc.d/rc.local

然后在这个文件底部添加脚本。

下图说明如何分别使用 cron 任务和 rc.local 运行两个示例脚本(/etc/rc.d/rc.local/home/gacanepa/script1.sh 和/home/gacanepa/script2.sh)。
script1.sh:

#!/bin/bash
DATE=$(date +‘%F %H:%M:%S‘)
DIR=/home/gacanepa
echo "Current date and time: $DATE" > $DIR/file1.txt

script2.sh:

#!/bin/bash
SITE="Tecmint.com"
DIR=/home/gacanepa
echo "$SITE rocks... add us to your bookmarks." > $DIR/file2.txt

*启动时执行 Linux 脚本 *

记住,一定要提前给两个示例脚本授予执行权限:

$ chmod +x /home/gacanepa/script1.sh
$ chmod +x /home/gacanepa/script2.sh

在登录或注销时执行 Linux 脚本

要在登录或注销时执行脚本,分别需要使用~.bash_profile和~.bash_profile文件。多数情况下,后者需要手动创建。在每个文件的底部,添加调用脚本代码,如前面例中所示,就可以实现这个功能。

总结

本文主要介绍如何在启动、登录以及注销系统时执行脚本。

原文地址:http://www.linuxprobe.com/linux-cron-shell.html

时间: 2024-10-13 17:04:41

详解在 Linux 启动时,如何自动执行命令或脚本的相关文章

web项目启动时,自动执行代码

tomcat启动时自动执行,以下两种方法的执行时长,会计算在tomcat的启动时长里. 1.ServletContextListener web.xml配置<listener> <listener-class>com.yuan.framework.GreyClientInitListener</listener-class> </listener> 1 public class GreyClientInitListener implements Servle

Linux基础知识之挂载详解(mount,umount及开机自动挂载)

Linux基础知识之挂载详解(mount,umount及开机自动挂载) 转载自:http://www.linuxidc.com/Linux/2016-08/134666.htm 挂载概念简述: 根文件系统之外的其他文件要想能够被访问,都必须通过"关联"至根文件系统上的某个目录来实现,此关联操作即为"挂载",此目录即为"挂载点",解除此关联关系的过程称之为"卸载" 1.挂载:根文件系统外通过关联至根文件系统上的某个目录来实现访问

学习笔记-《Linux基础知识之挂载详解(mount,umount及开机自动挂载)》

<Linux基础知识之挂载详解(mount,umount及开机自动挂载)>来源:Linux社区  作者:chawan 原文链接 http://www.linuxidc.com/Linux/2016-08/134666.htm 以下是学习作者这篇文章做的一些摘要及学习体会. 重要概念(经典原文引述) 挂载概念简述: 根文件系统之外的其他文件要想能够被访问,都必须通过"关联"至根文件系统上的某个目录来实现,此关联操作即为"挂载",此目录即为"挂载点

linux -- 启动时启动服务或者执行命令

运行等级 首先,我们需要知道Linux系统关于运行等级的知识.在不同的linux系统上(例如ubuntu和Fedora)这些数字与和所代表的意义可能不同,但主要的有以下几个: 单用户模式. 多用户模式. 网络多用户模式. 用于特殊目的的预留 添加显示管理器到等级3 因此,对于普通的运行等级,服务使用等级3,这时不管X11是否启动,服务将自动启动. 服务,守护进程,服务器 在Ubuntu中,可以使用sys-rc-conf命令简单的选择需要启动的已安装服务. 在Fedora下,可以使用chkconf

嵌入式Linux启动时网络参数配置

明白了嵌入式Linux启动时网络参数配置的流程,就会对网络这一部分了然于胸,以后出现网络不通的情况,就有了解决问题的思路. 1.网络参数配置的入口: /etc/init.d/rcS,如下两行 # 配置换回lo地址 /sbin/ifconfig lo 127.0.0.1 # 配置以太网eth0地址 /etc/init.d/ifconfig-eth0 2.进入ifconfig-eth0文件: #!/bin/sh echo -n Try to bring eth0 interface up......

关于Linux启动时挂载rootfs的几种方式

一直对Linux启动时挂载根文件系统的过程存在着很多疑问,今天在水木精华区找到了有用的资料,摘录如下: 1.Linux启动时,经过一系列初始化之后,需要mount 根文件系统,为最后运行init进程等做准备,mount 根文件系统有这么几种方式: 1)文件系统已经存在于硬盘(或者类似的设备)的某个分区上了,kernel根据启动的命令行参数(root=/dev/xxx),直接进行mount. 这里有一个问题,在root文件系统本身还不存在的情况下,kernel如何根据/dev/xxx来找到对应的设

如何让delphi在启动时不自动创建空的工程?

如何让delphi在启动时不自动创建空的工程? ?? <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> "C:\Program Files\Borland\Delphi6\Bin\delphi32.exe" -np 如何让delphi在启动时不自动创建空的工程?,布布扣,bubuko.com

如何让delphi在启动时不自动创建空的工程?并且改变默认工程目录?

如何让delphi在启动时不自动创建空的工程? ‍ 在属性的目标最后加 空格,-np. "C:\Program Files\Borland\Delphi6\Bin\delphi32.exe" -np 如何更改新建工程的默认目录? 目标的下面就是起始位置,改为你需要的目录即可. http://www.cnblogs.com/azhqiang/p/3778433.html

JIRA WIKI 安装详解 for Linux

JIRA 安装详解 for Linux http://wiki.csdn.net/pages/viewpage.action?pageId=1441800 Confluence 安装详解 for Linux http://wiki.csdn.net/pages/viewpage.action?pageId=1867879 wiki官方教程文档 https://confluence.atlassian.com/doc/confluence-documentation-home-135922.htm