osnosn

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::

Linux_开机_关机_重启_的时候执行脚本_systemd

转载注明来源: 本文链接 来自osnosn的博客,写于 2024-08.

参考

方法

  • 开机后,重启后,运行脚本
    • /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 的参考

我的例子

  • 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/ .


posted on 2024-08-15 14:41  osnosn  阅读(207)  评论(0编辑  收藏  举报