💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
本人主要分享计算机核心技术:系统维护、数据库、网络安全、自动化运维、容器技术、云计算、人工智能、运维开发、算法结构、物联网、JAVA 、Python、PHP、C、C++等。
不同类型针对性训练,提升逻辑思维,剑指大厂,非常期待和您一起在这个小小的网络世界里共同探索、学习和成长
运维之systemd 服务
背景介绍
从
Ubuntu 17.10
开始,/etc/rc.local
文件不再默认存在于系统中,因为 systemd 已成为主要的初始化系统。如果需要在系统启动时自动执行某些命令,可以通过编写 Shell 脚本并将其封装为一个 systemd 服务来实现这一操作。
实现方法
这里以一个简单的脚本为例,将需要开机自动执行的命令写入脚本文件内,赋予可执行权限。
脚本内容如下:
#!/usr/bin/env bash
sudo ip route del default via 192.168.1.254
sudo ip route add 192.168.101.0/24 via 192.168.1.254 dev ens33
该脚本用于删除和添加路由,赋予脚本可执行权限
sudo chmod +x /usr/local/bin/routeadd.sh
创建 systemd 文件
文件存放位置:
/etc/systemd/system/xx.service
写入以下内容,在 ExecStart 中指定脚本存放位置
[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
最后,设置为开机自启动即可
systemctl enable routeadd.service
查看开机启动项,可以看到自定义的服务已经设置成功了
PS:如果当前用户为普通用户,需要注意脚本内容中是否有需要使用 sudo 命令的部分。如果有,需提前为该用户配置免密执行 sudo 的权限,否则脚本将无法正确执行。
配置用户免密执行sudo
为了使普通用户能够免密执行自定义脚本并实现开机自启动,需要修改
/etc/sudoers
文件,添加相应的免密执行命令及其对应的用户
#配置这个是对sudo组中的所有用户生效
%sudo ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) NOPASSWD:/usr/sbin/ip,/usr/bin/systemctl
#如只需要对单独的用户生效,则注释掉%sudo该行,添加以下内容即可,test为用户名
test ALL=(ALL:ALL) ALL
test ALL=(ALL:ALL) NOPASSWD:/usr/sbin/ip,/usr/bin/systemctl