Крон не работает в альпийском docker - PullRequest
0 голосов
/ 27 января 2020

Я создал и добавил ниже запись в моем entry-point.sh для docker файла.

# start cron
/usr/sbin/crond  &

exec "${DIST}/bin/ss" "$@"

Мой файл crontab.txt выглядит следующим образом:

bash-4.4$ crontab -l
*/5 * * * * /cleanDisk.sh >> /apps/log/cleanDisk.log

Поэтому, когда я запускаю контейнер docker, я не вижу ни одного файла, созданного с именем cleanDisk.log.

Я настроил все разрешения, и crond работает как процесс в моем контейнере, см. Ниже.

bash-4.4$ ps -ef | grep cron
   12 sdc       0:00 /usr/sbin/crond
  208 sdc       0:00 grep cron

ТАК, кто-нибудь может подсказать, почему файл журнала не создается?

мой cleanDisk. sh выглядит ниже. Поскольку он запускается в первый раз и не соответствует всем критериям, я ожидаю, по крайней мере, напечатать "No Error file found on Host $(hostname)" в cleanDisk.log.

#!/bin/bash

THRESHOLD_LIMIT=20
RETENTION_DAY=3

df -Ph /apps/ | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5,$1 }' | while read output
do
        #echo $output
        used=$(echo $output | awk '{print $1}' | sed s/%//g)
        partition=$(echo $output | awk '{print $2}')
        if [ $used -ge ${THRESHOLD_LIMIT} ]; then
                echo "The partition \"$partition\" on $(hostname) has used $used% at $(date)"
                FILE_COUNT=$(find ${SDC_LOG} -maxdepth 1 -mtime +${RETENTION_DAY} -type f -name "sdc-*.sdc" -print | wc -l)
                if [ ${FILE_COUNT} -gt 0 ]; then
                        echo "There are ${FILE_COUNT} files older than ${RETENTION_DAY} days on Host $(hostname)."
                        for FILENAME in $(find ${SDC_LOG} -maxdepth 1 -mtime +${RETENTION_DAY} -type f -name "sdc-*.sdc" -print);
                        do
                                ERROR_FILE_SIZE=$(stat -c%s ${FILENAME} | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s\n", $1, v[s] }')
                                echo "Before Deleting Error file ${FILENAME}, the size was ${ERROR_FILE_SIZE}."
                                rm -rf ${FILENAME}
                                rc=$?
                                if [[ $rc -eq 0 ]];
                                then
                                        echo "Error log file ${FILENAME} with size ${ERROR_FILE_SIZE} is deleted on Host $(hostname)."
                                fi
                        done
                fi
                if [ ${FILE_COUNT} -eq 0 ]; then
                        echo "No Error file found on Host $(hostname)."
                fi
        fi

done

edit

my docker файл выглядит следующим образом

FROM adoptopenjdk/openjdk8:jdk8u192-b12-alpine

ARG SDC_UID=20159
ARG SDC_GID=20159
ARG SDC_USER=sdc

RUN apk add --update --no-cache bash \
    busybox-suid \
    sudo && \
    echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf

RUN addgroup --system ${SDC_USER} && \
    adduser --system --disabled-password -u ${SDC_UID} -G ${SDC_USER} ${SDC_USER}

ADD --chown=sdc:sdc crontab.txt /etc/crontabs/sdc/

RUN chgrp sdc /etc/cron.d /etc/crontabs /usr/bin/crontab 

# Also tried to run like this but not working
# RUN /usr/bin/crontab  -u sdc /etc/crontabs/sdc/crontab.txt

USER ${SDC_USER}
EXPOSE 18631

RUN /usr/bin/crontab /etc/crontabs/sdc/crontab.txt

ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["dc", "-exec"]
...