Helix Swarm 2018.2 в контейнере Docker - рабочие не могут появиться
Я пытаюсь организовать контейнеризацию сервера Helix Core 2017.1 с сервером Helix Swarm 2018.2. Оба работают в отдельных контейнерах Docker, которые сильно изменены из https://github.com/ambakshi/docker-perforce. Я пытаюсь выяснить, почему я вижу следующую ошибку на странице основных проектов:
Хм... нет рабочих очереди? Попросите вашего администратора проверить настройки рабочего.
А также почему маршрут /queue/status
возвращает:
{"tasks":0,"futureTasks":0,"workers":0,"maxWorkers":3,"workerLifetime":"595s","pingError":false}
Я следовал инструкциям из документации Helix Swarm для самого последнего выпуска, поскольку документация 2018.2 не содержит инструкций по настройке задания cron. Кроме того, нужно использовать chmod 644
на helix-swarm
задание cron в контейнере Helix Swarm, иначе оно выдаст ошибку:
cat > /etc/cron.d/helix-swarm <<EOF
# This ensures that a worker is fired up every minute
* * * * * nobody [ -x /opt/perforce/swarm/p4-bin/scripts/swarm-cron.sh ] && /opt/perforce/swarm/p4-bin/scripts/swarm-cron.sh
EOF
chmod 644 /etc/cron.d/helix-swarm
Я также попробовал:
* * * * * root [ -x /opt/perforce/swarm/p4-bin/scripts/swarm-cron.sh ] && /opt/perforce/swarm/p4-bin/scripts/swarm-cron.sh
Как с пустой строкой в конце файла, так и без нее.
Я также выполнил chmod 777
в каталоге, в котором оба swarm-trigger.pl
а также swarm-trigger.conf
хранятся в вашем док-контейнере Helix Core (они упоминают только разрешения на открытие .pl
один файл):
cat >>"/root/swarm-trigger.conf" <<EOL
SWARM_HOST="http://$SWARM_URL"
SWARM_TOKEN=$SWARM_TOKEN
EOL
...
chmod -R 777 /root/
CONFGURED="/root/swarm-trigger.pl -t ping -v 0"
if [ ! -z $CONFIGURED ]; then echo "Misconfigured Swarm server.\n\t$CONFIGURED"; fi
p4 triggers -o > /root/tmp
/root/swarm-trigger.pl -c /root/swarm-trigger.conf -o | sed '/^\s*#/d' >> /root/tmp
p4 triggers -i < /root/tmp
p4 configure set dm.shelve.promote=1
Однако я понял, что вам нужно использовать supervisor для запуска cron на контейнерах Centos Docker (также указано в документации Docker). И я добавил yum -y install supervisor
в Dockerfile для контейнера Swarm, а также yum -y install cronie
и последовал примеру https://github.com/kuetemeier/docker-centos-supervisor-cron для использования CMD
бежать supervisor
как моя точка входа, но затем заявить в supervisord.conf
что я хотел обоих crond
и мой конфигурационный скрипт для запуска:
[supervisord]
nodaemon=true
logfile = /var/log/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
[program:crond]
command=/bin/bash -c "source /etc/sysconfig/crond && exec /usr/sbin/crond -n $CRONDARGS"
process_name=%(program_name)s
numprocs=1
directory=/tmp
umask=022
priority=999
autostart=true
autorestart=true
startsecs=10
startretries=3
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
user=root
stderr_logfile = /var/log/supervisor/cron_stderr.log
stdout_logfile = /var/log/supervisor/cron_stdout.log
[program:run]
command=/run.sh
autostart=true
autorestart=false
startretries=0
redirect_stderr=false
Тем не менее, даже если crond
кажется, работает, согласно журналам в /var/log/supervisord.log
:
2019-05-30 19:09:18,783 CRIT Supervisor running as root (no user in config file)
2019-05-30 19:09:18,785 INFO supervisord started with pid 143
2019-05-30 19:09:19,792 INFO spawned: 'run' with pid 146
2019-05-30 19:09:19,794 INFO spawned: 'crond' with pid 147
2019-05-30 19:09:20,805 INFO success: run entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2019-05-30 19:09:30,112 INFO success: crond entered RUNNING state, process has stayed up for > than 10 seconds (startsecs)
Я также вижу:
# ps -ef | grep cron
root 146 142 0 22:30 ? 00:00:00 /usr/sbin/crond -n
Похоже, что работа по порождению рабочих не дает ожидаемого эффекта:(Кроме того, под журналами нет /var/log/supervisor/
,
РЕДАКТИРОВАТЬ: я также попытался добавить
* * * * * nobody [ -x /opt/perforce/swarm/p4-bin/scripts/swarm-cron.sh ] && /opt/perforce/swarm/p4-bin/scripts/swarm-cron.sh
в /etc/crontab
для обоих root
а потом nobody
, так же как chmod 777 /etc/crontab
в отчаянии, но я до сих пор не вижу никаких журналов, указывающих, что скрипт запущен.
Даже когда я запускаю скрипт вручную:
/opt/perforce/swarm/p4-bin/scripts/swarm-cron.sh
Я не вижу выхода. После изменения /opt/perforce/etc/swarm-cron-hosts.conf
файл, чтобы иметь ServerName
рой или уточнение
/opt/perforce/swarm/p4-bin/scripts/swarm-cron.sh -f /opt/perforce/etc/swarm-cron-hosts.conf
и ручной запуск не порождает рабочих.
Большое спасибо за чтение и за ваше время и помощь заранее!