一键启动,永不停歇:如何将你的 Shell 脚本变为 system 服务?

系统
如果你希望在开机时自动运行一些特定的命令,可以通过创建一个简单的 Shell脚本,并将其设置为一个 systemd 服务来轻松实现这个需求哦!

背景介绍

从 Ubuntu 17.10 版本开始,系统默认不再包含 /etc/rc.local 文件了,这是因为systemd已经成为了主要的系统初始化工具。不过别担心,如果你希望在开机时自动运行一些特定的命令,可以通过创建一个简单的 Shell脚本,并将其设置为一个 systemd 服务来轻松实现这个需求哦!

实现方法

这里以一个简单的脚本为例,将需要开机自动执行的命令写入脚本文件内,赋予可执行权限。脚本内容如下:

这个脚本的主要任务是持续关注 /var/log/auth.log 文件。一旦发现有异常登录的情况,它会自动收集尝试登录的用户名以及该用户的IP地址。接着,它会利用 ipinfo.io 来查找这些IP地址的具体位置信息。最后,通过一个第三方的通知工具,比如钉钉,将这些重要信息即时发送给您,确保您可以及时了解到任何不寻常的活动。

赋予该脚本可执行的权限:

chmod +x  /root/script/monitor_login.sh

创建systemd文件

在 /etc/systemd/system 目录中创建一个新的服务文件,例如 monitor-login.service:

sudo nano /etc/systemd/system/monitor-login.service

然后将以下内容添加到该文件中:

[Unit]
Description=Login Failure Monitoring Service
After=network.target

[Service]
ExecStart=/root/script/monitor_login.sh
Restart=on-failure
User=root
# 环境变量设置(如果有)
Environment="LOG_FILE=/var/log/auth.log"

[Install]
WantedBy=multi-user.target

配置说明:

[Unit]:

  • Description:服务的描述。
  • After=network.target:确保网络启动后再启动此服务。

[Service]:

  • ExecStart:指定脚本路径。
  • Restart=on-failure:如果脚本因错误退出,会自动重启。
  • User=root:使用 root 用户运行该服务(如果需要)。
  • Environment:设置环境变量,如 LOG_FILE。确保脚本中读取 $LOG_FILE 的位置正确。

[Install]:

  • WantedBy=multi-user.target:服务将在系统的多用户目标下启动,通常为默认运行级别。

重新加载systemd配置并启动服务

执行下面的命令, 重新加载systemd配置。

sudo systemctl daemon-reload

通过执行systemctl status monitor-login.service查看服务启动状态,如下图所示:

最后通过执行下面的命令,设置开机自启动。

 sudo systemctl enable monitor-login.service

通过执行如下命令查看开机启动项:

 systemctl list-unit-files --type=service | grep enabled | grep login

可以看到自定义的服务已经设置成功了,如下图所示:

验证

当检测到有用户异常登录时,我们的钉钉会收到如下图所示的温馨提醒,以帮助我们及时关注并处理可能的安全问题。

脚本获取方式

上述脚本已经上传上传到gitee,有需要的小伙伴可以自行获取。gitee上的仓库主要是分享一些工作中常用的脚本。小伙伴可以frok或者watch仓库,这样有更新可以及时关注到。

仓库地址:https://gitee.com/didiplus/script

责任编辑:赵宁宁 来源: 攻城狮成长日记
相关推荐

2022-03-15 11:30:56

数据中心

2013-07-10 10:16:04

容错服务器美国容错公司Stratus

2012-11-23 17:20:43

Linux服务器

2015-11-03 15:29:49

ONOS开放网络操作系统SDN

2021-03-01 12:37:10

Shell脚本端口

2015-06-18 17:25:19

地铁华为

2020-07-27 09:40:12

Spark SQL模型训练场景

2009-05-05 09:11:49

信息化劳动保障

2011-10-25 17:16:28

Linux服务器数据删除

2020-11-25 10:42:57

Python代码工具

2017-05-10 16:09:12

MySQL数据库查询

2017-04-21 15:04:03

存储存储芯片

2024-06-17 00:00:05

镜像仓库带宽

2014-09-01 09:49:24

github

2022-05-11 17:21:05

Btrfs文件系统Fedora

2021-08-31 08:32:40

开源项目开发

2021-12-02 07:50:29

分支服务git worktre

2018-08-29 08:19:43

iPhone求救手机

2015-02-09 15:25:52

换肤

2015-07-02 12:50:41

电子银行华为
点赞
收藏

51CTO技术栈公众号