• Необходимо чтобы информация о неудачном запуске через кронтаб любого задания направлялась на определенный email?

    dyuriev
    @dyuriev
    A posteriori
    в начало crontab'а (sudo -u %username% crontab -e) добавьте строку
    MAILTO=
    с нужным мылом.

    А вывод STDOUT команды занулите в /dev/null, чтобы успешные выполнения вам не прилетали.

    MAILTO=email@example.com
    0 */2 * * * /bin/backup.sh > /dev/null


    PS: запускайте не через wget, а перепишите на php-cli и вынесите за пределы document_root сайта, чтобы из вне нельзя было до него достучаться.
    Ответ написан
  • Как генерировать PDF в JS?

    dyuriev
    @dyuriev
    A posteriori
    Из предложенных автором вариантов однозначно puppeteer. На фронте начнете страдать с кроссбраузерностью кода, лимитами (многостраничные pdf вас заставят врасплох), да и качество - на фронте как правило html=>растр=>pdf и все плывет при увеличении. puppeteer (через хромиум) сохраняет честный вектор там где это уместно. Да и верстку html не придется делать под армию браузеров, а только под хромиум заранее известной версии.
    Ответ написан
    Комментировать
  • Как сделать якорь с плавающим отступом сверху?

    dyuriev
    @dyuriev
    A posteriori
    top = $(div).offset().top - 100;

    у вас до данной позиции (значение top) скролл идет, экспериментируйте

    upd: прочитал невнимательно, сравнивайте текущее положение и если $(div).offset().top меньше текущего, то есть скролл вверх, то -100, если больше, то есть скролл вниз, то -200

    upd2: js не практикую, но должно быть что-то вроде этого:
    $(document).ready(function(){
      $("#menu").on("click","a", function (event) {
        event.preventDefault();
        var div = $(this).attr('href');
        var top = $(div).offset().top;
        var pos = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;
    
        var delta = (top > pos) ? 200 : 100;
      
        top = top-delta;
        $('body,html').animate({scrollTop: top}, 1000);
      });
      
    });
    Ответ написан
    5 комментариев
  • Как на PHP вывести HTML?

    dyuriev
    @dyuriev
    A posteriori
    <a id="addCart_<?php echo $ass['name'] ?>" href="#" onClick="addToCart(<?php echo $ass['name'] ?>); return false;">Добавить в корзину</a>
    Ответ написан
    Комментировать
  • Как получить случайный элемент массива?

    dyuriev
    @dyuriev
    A posteriori
    console.log(
      myArray[
        Math.floor( Math.random() * myArray.length )
      ]
    );
    Ответ написан
    1 комментарий
  • Как сделать счетчик чисел с точкой?

    dyuriev
    @dyuriev
    A posteriori
    1. берите текущее значение, умножайте на 10
    2. инкрементируйте/декрементируйте (прибавляйте/удаляйте единцу)
    3. делите на 10
    4. округляйте до 1 знака после точки, а то js знаменит своей погрешностью при операциях с float =)


    upd: вот примерно так подправить ваш скрипт, но с округлениями не заморачивался, если где-то увидите цифры в форме 86.500000003213..., то вам домашние задание для самообразования - сделать округление перед выводом =)
    <script type="text/javascript">
        var number = document.querySelector('.number'),
        numberTop = number.getBoundingClientRect().top,
        start = +number.innerHTML*10, end = +number.dataset.max*10; //правка раз
    
        window.addEventListener('scroll', function onScroll() {
          if(window.pageYOffset > numberTop - window.innerHeight / 2) {
            this.removeEventListener('scroll', onScroll);
            var interval = setInterval(function() {
              number.innerHTML = ++start/10; //правка два
              if(start == end) {
                clearInterval(interval);
              }
            }, 5);
          }
        });
      </script>
    Ответ написан
    6 комментариев
  • Как сделать редирект на вывод из echo?

    dyuriev
    @dyuriev
    A posteriori
    Не совсем понятно что вы хотите именно сделать. Если отложенный редирект в самом браузере, а-ля "сейчас вы будете перенаправлены на страницу ... если этого не происходит, то нажмите на ссылку", то через js
    document.location.href = 'https://qna.habr.com/q/869777'
    свою ссылку только подставьте

    если вы хотите сразу редиректить из php:
    <?php
    header( 'Location: ' . buildSecureLink($baseUrl, $secret, $ttl), true, 301 );

    только обратите внимание, что перед header(); не должно быть никакого вывода верстки от слова вообще, даже пробела
    Ответ написан
  • Как установить модуль для Python на ubutnu _bz2?

    dyuriev
    @dyuriev
    A posteriori
    Судя по всему - вы питон из исходников собирали.

    Установите из репозиториев и не мучайтесь.
    Если этот вариант не для вас, то пересоберите после установки пакета libbz2-dev заново питон, ща команда configure увидит заголовочные файлы libbz2 и настроит сборку с его поддержкой
    Ответ написан
    Комментировать
  • Как побороть ошибку с работой сокетов bitrix?

    dyuriev
    @dyuriev
    A posteriori
    etc/hosts надо поправить не только на вашем компе, но и на компе/виртуалке где крутится тестовый домен

    предположим что у вас там BitrixVM, а значит наружу смотрит nginx

    Вариант 1
    /etc/hosts должен содержать строку
    127.0.0.1 phpma.localbitrix.ru
    а nginx должен этот айпишник так же слушать для этого домена

    Вариант 2
    /etc/hosts должен содержать строку
    192.168.0.96 phpma.localbitrix.ru

    Для проверки - зайдите в терминал сервера и выполните
    curl -I http://phpma.localbitrix.ru
    должен вернуть заголовки и код 200
    Ответ написан
    Комментировать
  • Https заменяется на http после прохода через nginx?

    dyuriev
    @dyuriev
    A posteriori
    У вас похоже nginx в контейнере не передает инфу в php-fpm о том что https используется
    fastcgi_param REQUEST_SCHEME https;
    или (пишу по памяти, пардоньте)
    fastcgi_param HTTPS on;

    а вообще по классике - создайте файл info.php с содержимым
    <?php phpinfo(); ?>
    и посмотрите что там прилетает заголовками в php

    UPD: если кто пришел с гугла сюда, чтоб не страдали - убрал кавычки лишние, подробности в комментариях
    Ответ написан
    5 комментариев
  • Есть ли большая разница между 2933 и 3200 МГц в ОЗУ?

    dyuriev
    @dyuriev
    A posteriori
    Разница в 9% =)

    Если CPU и GPU действительно высокопроизводительные, то узким местом в системе может быть действительно память. Но не забывайте, что между ними еще узлы материнской платы присутствуют.
    Ответ написан
    Комментировать
  • В Git коммит попал файл большой >100 mb как удалить?

    dyuriev
    @dyuriev
    A posteriori
    Отвечу чуть подробнее чем спрашиваете:

    Конкретный файл (www/video/route.mp4):
    git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch www/video/route.mp4 ' --prune-empty --tag-name-filter cat -- --all

    Файл по маске (*.mp4):
    git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch "*.mp4" ' --prune-empty --tag-name-filter cat -- --all

    Директорию (www/video):
    git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch www/video -r' --prune-empty --tag-name-filter cat -- --all


    Данный способ не оптимальный, но универсальный - проверит всю историю коммитов и выпилит из коммитов данные файлы/каталоги и перепишет все что дальше

    Пуш форсом отправляем все ветки в репозиторий
    git push origin --force --all

    не забываем сообщить другим разрабам что надо сделать git reset --hard origin/...

    Warning: опробуйте сначала на тестовом репозитории (склонируйте текущий куда нибудь и потренируйтесь). Не хочу чувствовать себя виноватым, если вы выпилите что-то исторически-ценное
    Ответ написан
    6 комментариев
  • Как установить модули Perl?

    dyuriev
    @dyuriev
    A posteriori
    изи
    apt install libhtml-mason-psgihandler-perl libweb-machine-perl starlet
    Ответ написан
    3 комментария
  • Как отключить кеширование csv файла через .htaaccess?

    dyuriev
    @dyuriev
    A posteriori
    <FilesMatch "\.(csv)$">
        <IfModule mod_expires.c>
            ExpiresActive Off
        </IfModule>
        <IfModule mod_headers.c>
            FileETag None
            Header unset ETag
            Header unset Pragma
            Header unset Cache-Control
            Header unset Last-Modified
            Header set Pragma "no-cache"
            Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
            Header set Expires "Thu, 1 Jan 1970 00:00:00 GMT"
        </IfModule>
    </FilesMatch>


    если не поможет, то перед апачем nginx или что-то аналогичное, что добавляет заголовки
    Ответ написан
    Комментировать
  • Почему Linux предпочтительнее для администрирования и чем? Почему многие предпочитают её?

    dyuriev
    @dyuriev
    A posteriori
    Скорее всего под таким вопросом начнется всем уже известный срач. А пару человек еще упрекнут вас в том, что у них 30-50-70 процентов серверов под FreeBSD

    Мое скромное мнение
    • Бесплатность
      Да, сейчас кто-нибудь заявит о том что на Red Hat не дешевле, а иногда и дороже Windows, но большинство дистрибьютивов Linux бесплатны
    • Открытость
      Данный факт не ценишь ровно до того момента, как приходится сделать что-то, что не разжевано в интернете. Рано или поздно разработчик доходит до того момента, когда ползет в исходники с глубоким душевным вопросом "как это %&$ должно работать?". Ибо некоторые моменты либо документированы неправильно, либо не полностью, либо в коде досадная ошибка, которую никто не замечал ранее, ну или замечал, но багрепорт/коммит с фиксом разрабу не кидал.
      В Windows-среде, особенно если это сама система, а не прикладной софт, данный баг может вылиться в недели или месяцы страданий. Там только реверс-инжиринг, если саппорт вас игнорит.
    • Документированость
      Команда не сработала как ожидалось? man commandname
      Не помогло? Гляньте сайт разработчика, там обычно на столько обширное вики/документация, что увлечетесь чтением.
      Программа свежая и документация пока не исчерпывающая? Гляньте репозиторий, поиском найдите по исходнику место которое хотите вызвать параметрически - скорее всего там увидите комментарий разраба, кто писал этот код, заодно еще парочку недокументированных возможностей почерпнете.
      В конце концов, если вдруг вам станет интересно, почему сделано так, а не иначе - гляньте багзиллу проекта - скорее всего поиском найдете обсуждение данного куска кода.
    • Гибкость
      Воткнуть свой драйвер в прямо в ядро? Легко (если уж научитесь драйвера писать, то внедрить в ядро особых проблем не составит)
    • Повсеместность
      Че уж там сервера. Роутеры, телефоны, embedded-решения - там везде в кулуарах за редким исключением крутится ядро Linux и знакомые пакеты и команды. Этакая стандартизация.
    • Эффект IKEA
      Вы сами того не подозреваете, но когда по кирпичикам соберете этот чертов конструктор, заставите каждый винтик крутиться (с вероятностью стремящейся к 100%) так как вам надо, вы полюбите эту систему.

    И еще раз напоминаю, что это мое скромное личное мнение.

    Несомнено, сервера и на Windows бывают быстрые, стабильные, работающие 24/7/365 годами. Но так уж повелось.
    Ответ написан
    2 комментария
  • Как подключиться к wifi через браузер на Linux Mint?

    dyuriev
    @dyuriev
    A posteriori
    если речь о Captive Portal, то попробуйте зайти на любой сайт по http протоколу в браузере через режим инкогнито

    например, http://habr.com

    в этом случае Captive Portal перехватит 80 порт и должен подставить свою Web-морду

    инкогнито необходимо чтобы браузер забыл про закэшированный hsts, а то будет сам сразу идти на сайт по https://
    Ответ написан
    Комментировать