自己添加 systemd 服务,配置开机启动实录

systemd 文件在下面两个文件夹中

  • 软件安装的 units /usr/lib/systemd/system/或者/lib/systemd/system/

  • 用户安装的 units /etc/systemd/system/

可以使用man systemd.unit, man systemd.service等命令来查看一些信息。

一个常见的systemd unit可能是以下一种类型: service.service, socket.socket, device.device, mount.mount, automount.automount, swap.swap, target.target, path.path, timer.timer, slice.slice, scope.scope

下面我将在自己电脑上新建一个叫ylstart.service的服务

acytoo@ladder:~$ su -
root@ladder:~# cd /etc/systemd/system
root@ladder:/etc/systemd/system# emacs ylstart.service

ylstart.service中写入以下信息

[Unit]
Description=A service
Requires=display-manager.service
After=display-manager.service

[Service]
ExecStart=/home/acytoo/.myservices/some.sh
Type=simple

[Install]
WantedBy=multi-user.target

写完后保存,退出,接下来在用户的目录下创建.myservices文件夹以及服务主体some.sh

acytoo@ladder:~$ mkdir -p .myservices && cd .myservices
acytoo@ladder:~/.myservices$ emacs some.sh

some.sh中加入你想执行的程序,比如我想在开机时更换伪装的网卡 MAC 地址,并且使机械硬盘休眠省电减小噪声。(我的操作系统是基于Debian testing的Kali linux,不同版本不同用法)

#!/bin/bash
echo "Hello"
ifconfig wlan0 down
macchanger -r wlan0
ifconfig wlan0 up
systemctl restart network-manager
echo "Mac address changed"
sleep 5s
hdparm -y /dev/sda
echo "/dev/sda entered standby mode"

保存,退出,然后给我们刚刚创建的shell执行权限。

acytoo@ladder:~/.myservices$ chmod +x ./some.sh

然后,可以测试我们刚刚创建的服务,比如下面这条命令让我们刚刚写的some.sh开机加载桌面环境后自启动。

root@ladder:~# systemctl enable ylstart.service

#参考链接

https://wiki.archlinux.org/index.php/systemd

https://wiki.archlinux.org/index.php/systemd#Writing_unit_files