Собрал из исходников себе пакетик с gearmand-1.1.2
Написал для него unit такого вида:
[Unit]
Description=gearman job control server
[Service]
EnvironmentFile=/etc/default/gearmand
ExecStartPre=/usr/bin/install -d -o gearman /run/gearman
PermissionsStartOnly=true
User=gearman
PIDFile=/run/gearman/server.pid
ExecStart=/usr/sbin/gearmand ${PARAMS}
[Install]
WantedBy=multi-user.target
В /etc/default/gearmand прописал все необходимые параметры:
PARAMS="--listen=127.0.0.1 \
--pid-file=/run/gearman/server.pid \
--log-file=/var/log/gearman-job-server/gearman.log \
--queue-type=postgres \
--libpq-conninfo='host=localhost user=gearman password=password dbname=gearman' \
--libpq-table=queue \
--daemon"
Активировал всё это дело с помощью systemctl enable gearmand.service
Запускаю systemctl start gearmand.service, всё вроде бы как запустилось, но в статусе пишет предупреждение
● gearmand.service - gearman job control server
Loaded: loaded (/etc/systemd/system/gearmand.service; enabled)
Active: active (running) since Thu 2015-10-15 11:12:30 UTC; 4s ago
Process: 14595 ExecStartPre=/usr/bin/install -d -o gearman /run/gearman (code=exited, status=0/SUCCESS)
Main PID: 14598 (gearmand)
CGroup: /system.slice/gearmand.service
└─14598 /usr/sbin/gearmand --listen=127.0.0.1 --pid-file=/run/gearman/server.pid --log-file=/var/log/gearman-job-server/gearman.log --queue-type=postgres --libpq-conninfo='host=localhost user=gearman password=password...
Oct 15 11:12:29 giveya.com systemd[1]: Starting gearman job control server...
Oct 15 11:12:30 giveya.com systemd[1]: Started gearman job control server.
Oct 15 11:12:30 giveya.com gearmand[14598]: /usr/sbin/gearmand: Could not open log file "/usr/var/log/gearmand.log", from "/", switching to stderr. (No such file or directory)
Т.е. демон пытается запуститься с дефолтными параметрами, игнорируя все опции командной строки, хотя в ps пишет, что опции были переданы
# ps waux | grep [g]earman
gearman 14598 0.0 0.1 451188 5872 ? Ssl 11:12 0:00 /usr/sbin/gearmand --listen=127.0.0.1 --pid-file=/run/gearman/server.pid --log-file=/var/log/gearman-job-server/gearman.log --queue-type=postgres --libpq-conninfo='host=localhost user=gearman password=password dbname=gearman' --libpq-table=queue --daemon
Однако lsof явно показывает, что логи не открылись где надо и в /run никаких pid-файлов не создалось.
Я подумал было, что сам gearmand глючит, но если со всеми моими опциями запустить его ручками из консоли, он запускается нормально, логи и пиды создаются, в lsof видно, что демон приконнектился к постгресу.
# ps waux | grep [g]earman
root 14662 0.0 0.1 459732 6708 ? Ssl 11:22 0:00 /usr/sbin/gearmand --listen=127.0.0.1 --pid-file=/run/gearman/server.pid --log-file=/var/log/gearman-job-server/gearman.log --queue-type=postgres --libpq-conninfo=host=localhost user=gearman password=password dbname=gearman --libpq-table=queue --daemon
postgres 14663 0.0 0.3 228564 14740 ? Ss 11:22 0:00 postgres: gearman gearman 172.30.0.166(35460) idle
# lsof -n | grep gearman | grep -E '(var|postgr)' | head -n 2
gearmand 14662 root 4w REG 202,1 0 395116 /var/log/gearman-job-server/gearman.log
gearmand 14662 root 5u IPv4 42645 0t0 TCP 127.0.0.1:35460->127.0.0.1:postgresql (ESTABLISHED)
Почему опции не отработали через systemd? Хочется сделать всё нормально через юнит, а не добавлять команду запуска gearmand'а тупо в rc.local.