Linux_开机_关机_重启_的时候执行脚本_systemd
转载注明来源: 本文链接 来自osnosn的博客,写于 2024-08.
参考
- Linux关机时执行指定脚本
- 如何在 Systemd 下配置并运行关机前的脚本
- 在 Linux 启动或重启时执行命令与脚本
- Centos7关机和重启前执行自定义脚本
- 如何在重启或启动时执行命令或脚本
- ubuntu中编写shell脚本开机自动启动
- 如何让ubuntu在关机或重启时执行脚本
- linux下添加简单的开机自启动脚本
- Linux 自启动 假死自启动
- 配置linux centos7.5系统 关机前执行指定脚本
- Linux 开机运行shell脚本 启动桌面时
- 详解在 Linux 启动时,如何自动执行命令或脚本
方法
- 开机后,重启后,运行脚本
- /etc/rc.local 中执行脚本
- /etc/init.d/ 中添加启动脚本
- /etc/systemd/system/ 中添加服务。有的系统没有使用systemd。
- crontab 中使用
@reboot
运行定时脚本。有的系统不支持,比如openwrt不支持。
- 关机前,重启前,运行脚本
- /etc/init.d/ 中添加停止脚本
- /etc/systemd/system/ 中添加服务
- ssh 登录时执行脚本
- /etc/profile
- ~/profile
- /etc/bashrc
- ~/.bashrc
systemd 的参考
- 第 10 章 使用 systemd 管理服务
- systemd服务配置文件编写
- 随笔分类 - systemd
- 可能是史上最全面易懂的 Systemd 服务管理教程
- 编写systemctl自启动服务
- systemd 编写服务管理脚本
- Linux系统编写Systemd Service实践
- manpages 系统自带的帮助手册
- man systemd
man systemd.service
man systemd.directives
man systemd.special
- man systemd
我的例子
- debian-11, debian-12 测试OK。(2024-08)
创建服务
- 创建服务文件 /etc/systemd/system/startup-shutdown-script.service
[Unit] Description=Startup shutdown Script ConditionFileIsExecutable=/root/script/startup-shutdown.sh #Requisite 不加入 nss-lookup.target, 这个是inactive dead, 会导致本服务不启动. Requisite=network-online.target Conflicts=halt.target reboot.target shutdown.target poweroff.target Before=halt.target reboot.target shutdown.target poweroff.target #网络在线后,dns可以解析后,才执行 After=network-online.target nss-lookup.target [Service] Type=simple #开机后,执行 ExecStart=/root/script/startup-shutdown.sh startup #关机前,重启前,执行 ExecStop=/root/script/startup-shutdown.sh shutdown StandardOutput=append:/root/script/startup-shutdown-out.log StandardError=append:/root/script/startup-shutdown-err.log RemainAfterExit=yes [Install] WantedBy=multi-user.target
- 创建服务所需的脚本: /root/script/startup-shutdown.sh
要设置执行权限chmod +x startup-shutdown.sh
#!/usr/bin/bash selfpath=$(/usr/bin/dirname $(/bin/readlink -f -- $0)) #当前目录 cd ${selfpath} log_file=script.log if [ "$1" = "startup" ]; then #开机后 echo $(/bin/date '+%F_%T%z_%w') startup >> ${log_file} #网络可用 curl -x '' --connect-timeout 9 'https://mydomain.domain/report.php' -k -sS -X POST -d "title=test1&log[]=123&log[]=456&log[]=startup" >> /dev/null 2>> ${log_file} elif [ "$1" = "shutdown" ]; then #关机前,重启前 echo $(/bin/date '+%F_%T%z_%w') shutdown >> ${log_file} #网络可用 curl -x '' --connect-timeout 9 'https://mydomain.domain/report,php' -k -sS -X POST -d "title=test1&log[]=123&log[]=456&log[]=shutdown" >> /dev/null 2>> ${log_file} else echo $(/bin/date '+%F_%T%z_%w') "$1" unknow >> ${log_file} echo " Usage:" echo " $0" "[startup|shutdown]" echo fi exit 0
- 刷新服务文件,激活服务,启动服务:
systemctl daemon-reload; systemctl enable startup-shutdown-script.service; systemctl start startup-shutdown-script.service;
删除服务
- 停止服务,注销服务
systemctl stop startup-shutdown-script.service; systemctl disable startup-shutdown-script.service;
- 删除对应文件。
/etc/systemd/system/startup-shutdown-script.service /root/script/startup-shutdown.sh
- 最后,刷新服务文件。
systemctl daemon-reload;
windows 开机,关机 执行脚本
----end----
转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/18358310.html
来自 osnosn的博客 https://www.cnblogs.com/osnosn/ .