暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

简化自动化:Shell脚本升级为Systemd服务

Linux运维进阶之路 2024-11-08
6

引言

随着CentOS系统逐渐采用systemd作为其默认的初始化系统,传统的/etc/rc.local
启动方法已不再适用。本文将向您展示如何将Shell脚本转换为Systemd服务,以便在CentOS环境中实现自动化管理,保持系统的高效运行。

操作步骤

编写Shell脚本

首先,我们需要创建一个Shell脚本来包含您希望在系统启动时自动执行的命令。以下是一个示例脚本,用于管理网络路由:
#!/usr/bin/env bash
sudo ip route del default via 192.168.1.254sudo ip route add 192.168.101.0/24 via 192.168.1.254 dev ens33

复制

确保脚本具有执行权限:

sudo chmod +x /usr/local/bin/routeadd.sh
复制

创建Systemd服务文件

接下来,创建一个systemd服务文件,以便在系统启动时自动运行您的脚本。服务文件应存放在/etc/systemd/system/
目录下,并包含以下内容:
[Unit]
Description=routeadd
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/routeadd.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target

复制

赋予服务文件执行权限,并启用服务:

sudo chmod +x /etc/systemd/system/xx.service
sudo systemctl enable xx.service

复制

现在,您可以通过查看启动服务列表来确认您的自定义服务已成功设置:

系统启动服务列表

配置免密sudo

如果当前用户不是root,那么在脚本中使用sudo命令时需要配置免密执行权限。这可以通过编辑/etc/sudoers
文件来实现:
# 对于sudo组中的所有用户生效
%sudo ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) NOPASSWD: /usr/sbin/ip,/usr/bin/systemctl

# 如果只需要对特定用户生效,取消注释以下行并替换用户名
# test ALL=(ALL:ALL) ALL
# test ALL=(ALL:ALL) NOPASSWD: /usr/sbin/ip,/usr/bin/systemctl

复制
编辑sudoers文件

结语

通过以上步骤,您可以轻松地将Shell脚本转换为systemd服务,实现在CentOS系统上的自动化管理。这不仅提高了系统的启动效率,还增强了系统的可管理性。

k8s核心实战课程星球

k8s核心实战课程星球,课程录制中,光课件就150多万字,课程2000节以上,时长400小时以上,讲解所有k8s核心api和一些扩展api,crd数量150个以上,讲解所有feature gate.   本星球会把录制的所有课程都放出来,包括后续要录的100多门云原生课程,费用首次只要200后续续费很便宜,相当于你买了一个的会员,就能享受到所有课程服务



- EOF -


推荐阅读  点击标题可跳转

1、Linux系统常用小技巧大作用序列~

2、挖矿病毒处置(Linux篇) ——从入门到放弃

3、Ansible 批量100台服务器添加 Crontab

4、如何在Linux中列出USB设备

5、推荐八款Linux远程连接工具,非常实用

6、35个常用一线运维shell脚本再整理(经典)

7、Linux故障排查思路及常用命令(收藏)


看完本文有收获?请分享给更多人

推荐关注「Linux 运维进阶之路」,提升Linux技能



❤️点赞&在看❤️,服务器三年不宕机

文章转载自Linux运维进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论