У меня есть вариант использования, когда мой двоичный файл «./main» должен запускаться внутри модуля и останавливаться через некоторое время (90 секунд) перед запуском нового модуля объектом cronJob.
Но меня не смущает, как добавить и сон, и запустить мой двоичный файл в фоновом режиме вместе. Пожалуйста, предложите хороший подход к этому и извините меня за неправильный синтаксис.
Докерфайл
FROM golang:alpine
WORKDIR /app
COPY main /app
RUN apk update && apk add bash
CMD ["./main &"]
---
cronjob.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: cron
namespace: test-cron
spec:
schedule: "*/2 * * * *"
concurrencyPolicy: Replace
successfulJobsHistoryLimit: 0
failedJobsHistoryLimit: 0
jobTemplate:
spec:
template:
spec:
restartPolicy: OnFailure
volumes:
- name: log
hostPath:
path: /data/log/test-cron/
containers:
- name: test-cron
image: test-kafka-0.5
command: ["sleep", "90"] // By adding this, the sleep command is working but my binary is not running inside my container.
Да пробовал CMD ./main && sleep 90 но pod не спит 90сек.
Вы хотите, чтобы main убили через 90 секунд, или что должно произойти потом? Kubernetes CronJob планирует только целые минуты; связано ли планирование cron с 90-секундным тайм-аутом или просто с тем, как вы запускаете контейнер?
@DavidMaze, да, я просто хочу запустить свой основной двоичный файл, и после этого модуль должен быть убит через 90 секунд.


В Kubernetes есть встроенная поддержка уничтожения пода по истечении крайнего срока; вам не нужно пытаться реализовать это вручную.
В вашем Dockerfile настройте свой образ для нормального запуска программы. Не пытайтесь включить какую-либо опцию «сна» или «убить» и не пытайтесь запускать программу в фоновом режиме.
CMD ["./main"]
В спецификации работы вам нужно установить поле activeDeadlineSeconds:.
apiVersion: batch/v1
kind: CronJob
spec:
jobTemplate:
spec:
activeDeadlineSeconds: 90 # <-- add
template:
spec:
containers:
- name: test-cron
image: test-kafka-0.5
# do not override `command:`
Идентичный вариант существует на уровне Pod. Для вашего варианта использования это не имеет особого значения, но если задание запускает несколько модулей, тогда существует разница в том, имеет ли крайний срок каждый отдельный модуль или задание в целом.
Из вопроса видно, что вы пытаетесь запускать это задание каждые две минуты и не иметь двух одновременных его копий. Предполагая, что модуль создан и запускается быстро, это должно выполнить это. Если у вас есть причина полагать, что задание будет выполняться быстрее во второй раз, и вы просто хотите перезапустить его, возможно, вам не нужна установка CronJob.
Спасибо, это сработало так, как я хотел, я гнался за командой сна, но activeDeadlineSeconds — настоящий герой здесь. :)
как насчет добавления двух, например: команда: ["./main", "&&", "sleep", "90"]