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