【问题标题】:systemd unit for pgagentpgagent 的 systemd 单元
【发布时间】:2020-09-10 00:17:38
【问题描述】:

我想为pgagnent 制作一个systemd 单元。

我在此页面http://technobytz.com/automatic-sql-database-backup-postgres.html 上只找到了init.d 脚​​本,但我不知道如何在systemd 中执行start-stop-daemon

我已经写了那个单元:

[Unit]
Description=pgagent
After=network.target postgresql.service

[Service]
ExecStart=start-stop-daemon -b --start --quiet --exec pgagent --name pgagent --startas pgagent -- hostaddr=localhost port=5432 dbname=postgres user=postgres
ExecStop=start-stop-daemon --stop --quiet -n pgagent 


[Install]
WantedBy=multi-user.target

但我收到如下错误:

[/etc/systemd/system/pgagent.service:14] Executable path is not absolute, ignoring: start-stop-daemon --stop --quiet -n pgagent

那个单元有什么问题?

【问题讨论】:

  • Stack Overflow 是一个编程和开发问题的网站。这个问题似乎离题了,因为它与编程或开发无关。请参阅帮助中心的What topics can I ask about here。也许Super UserUnix & Linux Stack Exchange 会是一个更好的提问地点。
  • 会不会是它没有以 postgres 用户身份运行?另外,如果您要使用 unix 套接字和 postgres 超级用户,我认为您不需要传递 hostaddr=localhost。我对您的体验非常感兴趣,因为我也想让 pgagent 以这种方式作为服务运行 :)

标签: linux centos systemd pgagent


【解决方案1】:

systemd 期望 ExecStart 和 ExecStop 命令包含可执行文件的完整路径。

在 systemd 管理下的服务不需要 start-stop-daemon。你会想让它执行底层的 pgagent 命令。

https://unix.stackexchange.com/questions/220362/systemd-postgresql-start-script 为例

【讨论】:

  • 请不要回复off-topicfodder。相反,关闭它并继续前进。有时建议问题可能与主题相关的网站会有所帮助。
【解决方案2】:

如果您使用yumapt-get 安装pgagent,它应该已经为您创建了systemd 文件。例如,在 RHEL 7(本质上是 CentOS 7)上,您可以安装 PostgreSQL 12,然后安装 pgagent

sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install postgresql12
sudo yum install postgresql12-server
sudo yum install pgagent_12.x86_64

这会将 PostgreSQL 安装到 /var/lib/pgsql/12 和 pgagent_12 到 /usr/bin/pgagent_12

另外,它在/usr/lib/systemd/system/pgagent_12.service创建一个systemd文件

systemctl status pgagent_12查看服务状态

将其配置为自动启动,然后启动它,使用:

sudo systemctl enable pgagent_12
sudo systemctl start pgagent_12

身份验证很可能会失败,因为默认的 .service 文件有

ExecStart=/usr/bin/pgagent_12 -s ${LOGFILE} hostaddr=${DBHOST} dbname=${DBNAME} user=${DBUSER} port=${DBPORT}

sudo tail /var/log/pgagent_12.log确认,会显示

Sat Oct 12 19:35:47 2019 WARNING: Couldn't create the primary connection [Attempt #1]
Sat Oct 12 19:35:52 2019 WARNING: Couldn't create the primary connection [Attempt #2]
Sat Oct 12 19:35:57 2019 WARNING: Couldn't create the primary connection [Attempt #3]
Sat Oct 12 19:36:02 2019 WARNING: Couldn't create the primary connection [Attempt #4]

为了解决问题,我们需要创建一个在服务启动时可以访问的 .pgpass 文件。首先,停止服务

sudo systemctl stop pgagent_12

使用less /usr/lib/systemd/system/pgagent_12.service 检查服务文件表明它有

User=pgagent
Group=pgagent

此外,/etc/pgagent/pgagent_12.conf

DBNAME=postgres
DBUSER=postgres
DBHOST=127.0.0.1
DBPORT=5432
LOGFILE=/var/log/pgagent_12.log

检查 /etc/passwd 文件以查找 pgagent 用户及其主目录:grep "pgagent" /etc/passwd

pgagent:x:980:977:pgAgent Job Schedule:/home/pgagent:/bin/false

因此,我们需要在/home/pgagent/.pgpass 创建一个 .pgpass 文件来定义 postgres 用户的密码

sudo su -
mkdir /home/pgagent
chown pgagent:pgagent /home/pgagent
chmod 0700 /home/pgagent
echo "127.0.0.1:5432:postgres:postgres:PasswordGoesHere" > /home/pgagent/.pgpass
chown pgagent:pgagent /home/pgagent/.pgpass
chmod 0600 /home/pgagent/.pgpass

目录和文件权限很重要。如果遇到问题,可以通过编辑/usr/lib/systemd/system/pgagent_12.service 的服务文件来启用调试日志记录,通过将ExecStart 命令更新为-l 2 来启用调试日志记录

ExecStart=/usr/bin/pgagent_12 -l 2-s ${LOGFILE} hostaddr=${DBHOST} dbname=${DBNAME} user=${DBUSER} port=${DBPORT}

更改 .service 文件后,必须使用 sudo systemctl daemon-reload 重新加载内容(如果您忘记了此要求,systemd 会通知您)。

继续启动/停止服务并检查/var/log/pgagent_12.log 最终,它将正常启动并显示sudo systemctl status pgagent_12

● pgagent_12.service - PgAgent for PostgreSQL 12
   Loaded: loaded (/usr/lib/systemd/system/pgagent_12.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-10-12 20:18:18 PDT; 13s ago
  Process: 6159 ExecStart=/usr/bin/pgagent_12 -s ${LOGFILE} hostaddr=${DBHOST} dbname=${DBNAME} user=${DBUSER} port=${DBPORT} (code=exited, status=0/SUCCESS)
 Main PID: 6160 (pgagent_12)
    Tasks: 1
   Memory: 1.1M
   CGroup: /system.slice/pgagent_12.service
           └─6160 /usr/bin/pgagent_12 -s /var/log/pgagent_12.log hostaddr=127.0.0.1 dbname=postgres user=postgres port=5432

Oct 12 20:18:18 prismweb3 systemd[1]: Starting PgAgent for PostgreSQL 12...
Oct 12 20:18:18 prismweb3 systemd[1]: Started PgAgent for PostgreSQL 12.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 2017-01-19
    • 2017-05-06
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多