当前位置: 首页 > news >正文

【Linux】如何在linux系统重启或启动时执行命令或脚本(也支持docker容器内部)

如何在linux系统重启或启动时执行命令或脚本(也支持docker容器内部)

  • 第一种:使用 systemd 服务单元在重启或启动时运行命令或脚本
  • 第二种:使用 /etc/rc.d/rc.local 文件在重启或启动时运行脚本或命令
  • 第三种:使用 crontab 在重启或启动时执行命令或脚本

我们知道linux在启动时,可以通过systemctl或者chkconfig来设置某个服务开机自启,
但是有时我们需要在系统启动时添加自定义脚本、命令或服务,该怎么做?

介绍三种方法,我只用过第一种。

第一种:使用 systemd 服务单元在重启或启动时运行命令或脚本

在这里插入图片描述

只需要创建一个 systemd 启动脚本并将其放在 /etc/systemd/system/ 目录中:

# vim start_redis_celery.service[Unit]
Description=Run a Custom Script at Startup
After=default.target[Service]
ExecStart=/start_redis_celery.sh[Install]
WantedBy=default.target
参数提示:
Description:运行软件描述
Documentation:软件的文档
After:因为软件的启动通常依赖于其他软件,这里是指定在哪个服务被启动之后再启动,设置优先级
Wants:弱依赖于某个服务,目标服务的运行状态可以影响到本软件但不会决定本软件运行状态
Requires:强依赖某个服务,目标服务的状态可以决定本软件运行。
ExecStart:执行命令
ExecStop:停止执行命令
ExecReload:重启时的命令
Type:软件运行方式,默认为simple
WantedBy:这里相当于设置软件,选择运行在linux的哪个运行级别,只是在systemd中不在有运行级别概念,但是这里权当这么理解。

将单元脚本放置在 systemd 所在位置后,运行以下命令更新 systemd 配置文件并启用服务:

# systemctl daemon-reload
# systemctl enable start_redis_celery.service

reboot重启测试效果!

第二种:使用 /etc/rc.d/rc.local 文件在重启或启动时运行脚本或命令

/etc/rc.local 文件是在切换到多用户运行级别的过程结束时,在所有正常的计算机服务启动之后执行的。

所以需要将你的脚本位置添加到 /etc/rc.d/rc.local 文件中以在启动时运行。

确保该文件有运行权限:

# chmod +x /etc/rc.d/rc.local

比如
脚本完成后,设置可执行权限:

# chmod +x /opt/scripts/start_redis_celery.sh

最后,将该脚本添加到rc.local文件底部:

# vi /etc/rc.d/rc.local/opt/scripts/start_redis_celery.sh

reboot重启测试效果!

第三种:使用 crontab 在重启或启动时执行命令或脚本

cron 在特定时间在后台自动执行计划的作业。可以在 cron 任务中使用特殊的字符串 @reboot 来完成。@reboot
是一个特殊的字符串,它允许用户在启动时运行任何命令或脚本。

所以呢只需在 crontab 文件中添加以下条目:

# crontab -e@reboot /opt/scripts/start_redis_celery.sh

reboot重启测试效果!


以上方法也可以进入容器内部编写,实现容器启动自动执行某些程序的功能

http://www.lryc.cn/news/143859.html

相关文章:

  • 医疗中心管理环境温湿度,这样操作就对了!
  • 嵌入式系统存储体系
  • 【Java架构-版本控制】-Gitlab安装
  • 关于disriminative 和 generative这两种模型
  • 关于Java中@Transient主键的作用的一些介绍
  • 死信队列理解与使用
  • tomcat 启动 java war 包
  • leetcode分类刷题:滑动窗口(三、两个序列+窗口定长类型)
  • 一个简单的web应用程序的创建
  • 分类行为的排斥作用
  • 表现层消息一致性处理
  • 【C语言进阶(8)】自定义数据类型1:结构体
  • 【Spring Boot】以博客管理系统举例,完整表述SpringBoot从对接Vue到数据库的流程与结构。
  • TabView 初始化与自定义 TabBar 属性相关
  • 线程池等待对象回调函数执行(CreateThreadpoolWait)
  • npm yarn pnpm npx nvm 命令怎么区分怎么用
  • 解锁市场进入成功:GTM 策略和即用型示例
  • 深度学习12:胶囊神经网络
  • unity 提取 字符串中 数字 修改后返回 字符串
  • GWO-LSTM交通流量预测(python代码)
  • mysql建表问题
  • RocketMQ:一个纯java的开源消息中间件--开发测试环境搭建
  • MySQL-Centos下MySQL5.7安装教程
  • nginx配置SSL证书配置https访问网站 超详细(附加配置源码+图文配置教程)
  • bh004- Blazor hybrid / Maui 使用 BootstrapBlazor UI 库快速教程
  • k8s挂载映射操作详解
  • DevOps团队如何提高Kubernetes性能
  • springboot整合modbus4J(二)
  • ROS2之topic
  • C语言数值表示——进制、数值存储方式