linux systemd自行编写服务

自己拿一台闲置电脑部署了一个postgreSQL服务,然后每次启动电脑之后都得重新执行一下启动命令:

user$user-pc sudo su - postgres //切换到postgres用户下,只有他有权限运行
postgres$user-pc pg_ctl -D /usr/local/pgsql/data start

这样很麻烦。
一是要切换到postgres用户下;
二是要手动启动开启postgresql服务命令。

于是想能不能:

  • 在我当前用户下执行postgres用户才能执行的命令。
  • 系统启动的时候执行命令。

首先解决第一个问题,在当前用户下执行其他用户命令:

经过查阅stackoverflow,得知我们可以用下面方式以当前用户执行其他用户命令:

su -  -c ""

于是就有了:

sudo su - postgres -c ' pg_ctl -D /usr/local/pgsql/data start '

然后解决第二个问题,启动时执行命令:
由于服务器是ubuntu18.04。记得以前用centos6.5做服务器的时候,启动命令都是写在rc.local下的。但是经查,从ubuntu16.10开始就把rc.local服务化了,独立出systemd。

所以,我们需要写入一个service,写法如下:
首先新建/etc/systemd/system/foo.service,文件内容:

[Unit]
Description=Job that runs your user script

[Service]
ExecStart=/some/command
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

保存退出,执行 :

sudo systemctl daemon-reload
sudo systemctl enable foo.service

于我而言,我创建了/etc/systemd/system/start-postgres.service文件,里面内容为

[Unit]
Description=Job that runs your user script

[Service]
ExecStart=/bin/bash -c " sudo su - postgres -c ' pg_ctl -D /usr/local/pgsql/data start ' "
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

然后执行

$ sudo systemctl daemon-reload
$ sudo systemctl enable foo.service

重启计算机,发现postgres自动启动了。

总结

原先看RHCE教材的时候,不懂systemctl start xxx.service 的具体含义,现在明白了。我们的service都写在/etc/systemd/system/下,每次开机只要enabled状态的service都会被启动起来。

扩展

配置项

你可能感兴趣的:(linux systemd自行编写服务)