Linux 开机自启脚本

1、修改 /etc/rc.d/rc.local 文件方式 

/etc/rc.d/rc.local 用于用户自定义开机启动程序,因此可以往里写开机要执行的命令或脚本。

1、设置 rc.local 的可执行权限
# chmod +x /etc/rc.d/rc.local

2、创建待执行的脚本,如下:
# cat /home/test.sh
 #!/bin/bash
 echo "hello world" >> /home/out.txt
 date >> /home/out.txt

3、设置脚本的可执行权限
# chmod +x /home/test.sh

4、把脚本放到 /etc/rc.d/rc.local 尾部
# cat /etc/rc.d/rc.local
  ... 
 /home/test.sh

5、重启系统使之生效
# reboot

6、查看日志文件判断脚本是否执行
# cat /home/out.txt
hello world
Thu Dec 30 20:45:00 CST 2021

有关 /etc/rc.d/rc.local 执行时机如下:

树莓派 python 心跳定时任务 树莓派定时执行脚本_树莓派 python 心跳定时任务

 

 

 

2、使用 crontab 方式 

crond 是 linux 下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与 windows 下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动 crond 进程,crond 进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。 因此我们可以使用 crondtab 命令创建一个任务,让该任务在重启时进行执行。

# crontab -e
//进入编辑,输入如下行
@reboot /home/test.sh

//重启设备
# reboot 

//查看日志
# cat /home/out.txt
hello world
Thu Dec 30 21:09:03 CST 2021

 

3、使用 systemd 服务

Systemd 服务是一种以 .service 结尾的单元(unit)配置文件,用于控制由 Systemd 控制或监视的进程。简单说,用于后台以守护进程(daemon)的形式运行程序。

systmd service 文件一般放在/etc/systemd/system/文件夹中。 

创建一个服务如下

//在/etc/systemd/system/下创建一个服务,如下
# vim ser.service

//[Unit] 区块:启动顺序与依赖关系。
[Unit]
//Description字段给出当前服务的简单描述
Description=Run a Custom Script at Startup
After=default.target

//Service区块定义如何启动当前服务
[Service]
//ExecStart字段:定义启动进程时执行的命令
ExecStart=/home/test.sh

//Install区块,定义如何安装这个配置文件,即怎样做到开机启动
[Install]
//WantedBy字段:表示该服务所在的 Target,Target的含义是服务组,表示一组服务
WantedBy=default.target


//更新服务配置文件,并使能服务
# systemctl daemon-reload
# systemctl enable ser.service

//重启系统
# reboot

 

 

 Ubuntu 18.04

Ubuntu 18.04不再使用initd管理系统,改用systemd,包括用systemctl命令来替换了service和chkconfig的功能。

systemd 默认读取 /etc/systemd/system 下的配置文件,该目录下的文件会链接/lib/systemd/system/下的文件。
不同于以往的版本,ubuntu18.04默认不带/etc/rc.local文件,我们需要通过配置来让rc.local.service生效。
然后我们就可以像以前那样,直接把启动脚本写入/etc/rc.local文件,这样机器启动时就会自动运行它。

设置 rc-local.service, 如果没有需要自己新建文件,

sudo vim /etc/systemd/system/rc-local.service

[Unit]
 Description=/etc/rc.local Compatibility
 ConditionPathExists=/etc/rc.local

[Service]
 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 StandardOutput=tty
 RemainAfterExit=yes
 SysVStartPriority=99

[Install]
WantedBy=multi-user.target
 alias=rc-local.service

激活rc.local

systemctl enable rc-local.service

添加启动服务,没有/etc/rc.local 这个文件 就自己创建,在exit 0之前输入的命令脚本都可以被执行,记得给脚本执行权限  chmod +x /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.

# 下面这条是要开机启动的命令
cd /root
exit 0

 方法二 :对于无需sudo 权限执行的脚本

 1.首先要编写一个脚本,第一行是要添加的解释器,后面是要执行的指令内容 编写了脚本后,将脚本文件mv移动到/etc/init.d/文件夹中并添加权限

#!/bin/bash
/root/work/start.sh

 

2,添加/删除开机启动

sudo update-rc.d dataserver defaults 90

sudo update-rc.d -f dataserver remove

 

 

自动重启:

1.进入编辑配置
sudo nano /etc/crontab

2.在文件中加入如下语句:

* * * * * root reboot(从左到右,五个 * 依次是 分,时 ,天,月,星期)