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

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

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

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

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

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

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

只需要创建一个 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重启测试效果!


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

你可能感兴趣的:(编程笔记(问题解决),部署&Linux运维,Cloud云原生,linux,docker,运维)