Невозможно выполнить .sh файл в докере crontab - PullRequest
0 голосов
/ 23 марта 2019

Я работаю над проектом на Docker, Crontab, Python & CentOS.У меня есть требование читать переменные окружения docker compose в скрипте Python.

У меня есть следующие файлы Docker File, Crontab и Shell Wrapper

Docker file

FROM centos:latest

RUN yum -y install crontabs

RUN yum update -y \
    && yum install -y https://centos7.iuscommunity.org/ius-release.rpm \
    && yum install -y python36u python36u-libs python36u-devel python36u-pip \
    && yum install -y which gcc \ 
    && yum install -y openldap-devel  

# pipenv installation
RUN pip3.6 install pipenv
RUN ln -s /usr/bin/pip3.6 /bin/pip
RUN rm /usr/bin/python
# python must be pointing to python3.6
RUN ln -s /usr/bin/python3.6 /usr/bin/python

RUN pip install --upgrade pip  
RUN pip install pymysql
RUN pip install pymongo
RUN pip install lxml
RUN pip install pyyaml
RUN pip install envs

# comment out PAM
RUN sed -i -e '/pam_loginuid.so/s/^/#/' /etc/pam.d/crond

RUN printenv | grep -v "MAINDB_CONNECTIONSTRING" > /root/project_env.sh

ENV SCRIPT_DIR="/opt/Importer"
WORKDIR ${SCRIPT_DIR}
COPY Importer/* ./

#Add your cron file
ADD Importer/crontab /etc/cron.d/crontab
RUN chmod 0644 /etc/cron.d/crontab
RUN chmod +x /opt/Importer/ShellWrapper.sh

#This will add it to the cron table (crontab -e)
RUN crontab /etc/cron.d/crontab

# Create the log file to be able to run tail
RUN touch /var/log/cron.log

CMD crond && tail -f /var/log/cron.log

Crontabfile

#!/bin/bash
* * * * * /usr/bin/sh /opt/Importer/ShellWrapper.sh
# Mandatory blank line

ShellWrapper.sh

#/bin/bash
/usr/bin/python Importer.py

Фактический результат - Когда я выполняю ShellWrapper.sh непосредственно в docker / bin / bash, выполняется сценарий python, но тот же ShellWrapper.sh не выполняется с Crontab.

Ожидаемый результат - Crontab должен выполнить ShellWrapper.sh, а файл ShellWrapper.sh выполнит скрипт Python

Не могли бы вы помочь с этим?

1 Ответ

0 голосов
/ 23 марта 2019

В cron.d вам необходимо указать пользователя:

* * * * * root /usr/bin/sh /opt/Importer/ShellWrapper.sh

См. Также: похожие вопросы по использованию папки cron.d

...