如何在 Linux 重启、登录或注销时自动执行命令/脚本?

1. 写在前面

在本文中,我们介绍如何在重启、登录和注销时自动运行脚本。

2. 在重启或启动过程中执行 Linux 脚本

在启动过程中执行命令或运行脚本有两种传统方法:

示例所需脚本:

script1.sh:

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

script2.sh:

#!/bin/bash
SITE="Jpzhang.com"
DIR=/root/linux/script
echo "$SITE rocks... add us to your bookmarks." > $DIR/file2.txt

script3.sh:

#!/bin/bash
USER="Jpzhang"
DIR=/root/linux/script
echo "$USER login system" > $DIR/login.txt

script4.sh:

#!/bin/bash
USER="Jpzhang"
DIR=/root/linux/script
echo "$USER logout system" > $DIR/logout.txt

对应脚本需获取执行权限:

$ chmod +x /root/linux/script/script1.sh
$ chmod +x /root/linux/script/script2.sh
$ chmod +x /root/linux/script/script3.sh
$ chmod +x /root/linux/script/script4.sh

2.1 使用 cron job

cron job 除了常用表示时间格式(分/时/日/月/星期)外,cron job 调度程序还允许使用 @reboot,该指令后跟脚本的绝对路径,可允许脚本在机器启动后运行。

不过,这种方法有两个注意事项:

  • cron job 守护进程必须正在运行(正常情况下是这样);

  • 脚本或 crontab 文件必须包含所需的环境变量;


示例:@reboot 的使用方法如下:

(1) crontab -e -u root,这时候打开了一个文本编辑窗口,输入如下内容

格式:@reboot 脚本路径和脚本名称,如下:

@reboot /root/linux/script/script1.sh

(2) 运行 crontab -l 查看是否保存成功

... ...

@reboot /root/linux/script/script1.sh

(3) 重启机器会自动执行脚本

配置完成后,会在开机后执行脚本,输出如下:

root@dev:~/linux/script# cat /root/linux/script/file1.txt
---------------------------------------------------------------------------
Current date and time: 2024-02-22 09:54:59

如果需要延时执行,可以参考配置:

@reboot sleep 300 && /root/linux/script/script1.sh

2.2 使用 /etc/rc.local

Linux rc-local 服务,是开机自动执行脚本或命令的,它的启动顺序是在系统所有服务加载完成之后执行。

Ubuntu 18.04/22.04 示例:

(1)新建 rc.local 文件

Ubuntu 18.04 中 /etc/ 目录下是没有 rc.local 文件的,需要我们手动建立一个。

touch /etc/rc.local
chmod 755 /etc/rc.local
echo '''#!/bin/bash''' >> /etc/rc.local

(2)设置开机启动 rc-local

systemctl start rc-local
systemctl enable rc-local

通过命令 systemctl status rc-local 查看服务已经正常开启了。

● rc-local.service - /etc/rc.local Compatibility
Loaded: loaded (/lib/systemd/system/rc-local.service; enabled-runtime; vendor preset: enabled)
Drop-In: /lib/systemd/system/rc-local.service.d
└─debian.conf
Active: active (exited) since Thu 2024-02-22 23:13:49 CST; 18s ago
Docs: man:systemd-rc-local-generator(8)
Tasks: 0 (limit: 4915)
CGroup: /system.slice/rc-local.service

Feb 22 23:13:49 jpzhang systemd[1]: Starting /etc/rc.local Compatibility...
Feb 22 23:13:49 jpzhang systemd[1]: Started /etc/rc.local Compatibility.

(3)在 rc.local 中添加开机需要自动执行的脚本

#!/bin/bash

/root/linux/script/script2.sh

(4) 配置完成后,会在开机后执行脚本,输出如下:

root@dev:~/linux/script# cat /root/linux/script/file2.txt
---------------------------------------------------------------------------
Jpzhang.com rocks... add us to your bookmarks.

3. 登录和注销时执行 Linux 脚本

要在登录或注销时执行脚本,请分别使用 ~.bash_profile 和 ~.bash_logout。默认没有对应文件,需要手动创建文件,并在文件底部添加一行调用脚本。如下:

  • 登陆执行脚本

vi ~/.bash_profile, 添加脚本:

root@dev:~/linux/script# cat ~/.bash_profile
---------------------------------------------------------------------------
/root/linux/script/script3.sh

用户登录,自动执行脚本,输出:

root@dev:~/linux/script# cat /root/linux/script/login.txt 
---------------------------------------------------------------------------
Jpzhang login system
  • 注销执行脚本

vi ~/.bash_logout, 添加脚本:

root@dev:~/linux/script# cat ~/.bash_logout
---------------------------------------------------------------------------
/root/linux/script/script4.sh

用户注销,自动执行脚本,输出:

root@dev:~/linux/script# cat /root/linux/script/logout.txt 
---------------------------------------------------------------------------
Jpzhang logout system

感谢您花时间阅读文章!

收藏本站不迷路!


原文始发于微信公众号(滑翔的纸飞机):如何在 Linux 重启、登录或注销时自动执行命令/脚本?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/260783.html

(0)
土豆大侠的头像土豆大侠

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!