> ## Content Index
> Fetch the complete content index at: https://www.rozhkov.me/llms.txt
> Use this file to discover other available public pages before exploring further.

# Обісрався з кроном
- URL: https://www.rozhkov.me/shity-cron/
- Published: 2024-02-13T07:24:00.000Z
- Updated: 2024-02-13T14:47:14.000Z
- Author: Vova Rozhkov
- Tags: робота

Час розваг! Місяць тому я рефакторив [@Donate1024Bot](https://t.me/Donate1024Bot), щоб [прибрати node.js та npm з білдчейну](https://www.rozhkov.me/clown-programming/).

Через кілька днів помітив що кнопки на інтерфейсі попердолило. З'ясувалося що кудись дівся CSS який відповідав за теми, і замість того щоб зафорсити світлу тему, воно вмикало системну, відповідно частину UI пердолило, бо вона не була заточна під темну. Замість того щоб розібратися, я накопіпастив css-варіаблів світлої теми в дефінішн темної. Ну типу 

```
@media (prefers-color-scheme: dark) {
    :root {
        color-scheme: light;
```

Класно придумав, правда? Зробив так і забив.

На вихідних трохи мав часу, щоб нарешті замерджити фічу для сайту: [список волонтерів](https://donate1024.org/volunteers), який зробила моя колега [Олекса Лелека](https://t.me/bureviy%5Fchannel). Коли вже засів за мердж, давай думаю оновлю бібліотеку [DaisyUI](https://daisyui.com/). Cкачав новий css, поклав у папку `vendor`, запустив, подивився, ніби майже нічого не зламалося. Посипалась пара елементів, але Олекса люб'язно підфіксила те що відпало та й по тому.

Далі пішов в адмінку, дивлюся, а там інпути не такі як мають бути. В DaisyUI вони з закругленими бордерами, а у мене — з прямокутними🤔 Знову прошу Олексу подивитися, каже що там чомусь не відпрацьовує потрібний CSS.

![](https://www.rozhkov.me/content/images/2024/02/image-1.png)

Починаю підозрювати, що ідея викинути ноду та збирати все тайлвіндівським бінарником не дуже спрацювала, бо є якісь бока. Деякий час дебажимо, але не знаходимо проблеми. Думаю що проблема таки точно у збірці, тому що DaisyUI підключається як Tailwind плагін, а якщо брати чисто CSS, то воно там може щось пропустити.

Тому наступного дня вирішую що треба вертати все взад. Збирати CSS не бінарником, а через ноду. Насправді я й раніше збирав бінарником, але сам css тягнув через npm. Тому то було не зовсім «вернути взад», швидше, «зробити по-іншому».

Сів, `gem install cssbundling-rails`, туди сюди, піф паф, `yarn install`, `yarn build:css`, там підфіксив, рефрешу — опа! Всі стилі стали як треба, а CSS скоротився в 19 разів. Походу все-таки або я той бінарник не так сконфігурив, або там щось не так.

Ну я такий задоволений ура ура, стилі на місці, все красиво.

Давай тепер то в докер імедж запхати, а ви знаєте, не так просто зібрати докупи Ruby та Node. Короче я ставлю `dockerfile-rails`, генерую `Dockerfile` де розумні люди за мене подумали як все так поставити, щоб не за всі гроші світу.

Зібрав поставив запустив, все працює! Нюанс тільки в тому, що в новому імеджі `debian` замість `alpine`. Ну, думаю, не проблема.

Деплою все туди сюди, запрацювало, сайт дзижчить. Дивлюся логи білда — впало. Нумо розбиратися — виявляється не ~~встає~~ підіймається `crond` який я запускаю окремим контейнером та який відповідає за те, щоб розіслати донаторам щоденний збір, звіт, оновити інфу по монобанках і так далі.

Перша проблема, в альпіні бінарник називається `crond`, а у дебіані `cron`. Геніально! Друга — відрізняються ключі. Міняю назву бінарника, міняю ключі... `cron: can't open or create /var/run/crond.pid: Permission denied`

Ну звісно, старий імедж в мене запускався з-під рута, а в новому яйцеголові зробили все по-сек'юрному, юзер 1000 і поїхав.

А тисячному юзеру ніхто не давав право запускати крон.

Сідаю з'ясовувати як то зробити правильно, гуглю, пробую всілякі `cron.allow` і `chmod gu+rw /var/run && chmod gu+s /usr/sbin/cron` звісно ця шляпа не працює. Ніби й помилок нема, але й джоби не запускаються.

Крон це знаєте штука яку не так легко продебажити. Логи не пишуться, ні помилки, ні успіху. Не розумію в чому річ. Кронтаб є, самі команди виконуються якщо запускати окремо.

Короче годину я з тим і так і так провозився, ніц не допомогло. Думаю ганьба, 2024, а людина не може крон в контейнері запустити.

У відчаї йду на fly.io думаю може там вже шось придумали. І [такі да](https://fly.io/docs/app-guides/supercronic/)! Розумні люди плюнули на бінарник 50-и річної давності та зробили drop-in replacement який працює з-під юзера і не вимахується.

Називається [Supercronic](https://github.com/aptible/supercronic). В інструкції вже готовий набір для докерфайла, бери й запускай. Зкопіпастив, задеплоїв, вуаля! Все працює. І логи і пише і їсти не просить.

Fin.