Переход сервера на Debian Stretch

Обновил сервер с Debian 8 (Squeeze) до Debian 9 (Stretch).

Хотел сразу перейти на Debian 10, но на OpenVZ-тарифах он не поддерживается из-за различий требования к ядру.

К слову, в Debian 9 теперь nginx версии 1.16.1, что позволило нормально перейти на HTTP/2.

[WordPress] 502 ошибка при открытии админки

Столкнулся с проблемой, что при попытке открыть админку WordPress, отображалась ошибка 502 Bad Gateway.

Отключение плагинов не помогло. Стал копать в разных направлениях, но тоже безрезультатно.

В итоге помог перезапуск FastCGI:

php5-fpm restart

Unit nginx.service entered failed state

При попытке перезапустить nginx получаем ошибку:

nginx restart

[....] Restarting nginx (via systemctl): nginx.serviceJob for nginx.service failed. See 'systemctl status nginx.service' and 'journalctl -xn' for details.
failed!

Проверяем статус:

systemctl status nginx.service

nginx.service - nginx - high performance web server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
   Active: failed (Result: exit-code) since Sun 2019-12-15 16:42:45 MSK; 1min 48s ago
     Docs: http://nginx.org/en/docs/
  Process: 12694 ExecStop=/bin/kill -s TERM $MAINPID (code=exited, status=0/SUCCESS)
  Process: 16448 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=1/FAILURE)
 Main PID: 5865 (code=exited, status=0/SUCCESS)

Проверяем файл конфигурации:

nginx -t -c /etc/nginx/nginx.conf

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Пробуем вылечить:

fuser -k 80/tcp
fuser -k 443/tcp
/etc/init.d/nginx restart

Проверяем:

[ ok ] Restarting nginx (via systemctl): nginx.service.

[Linux] Удаление очереди писем в Postfix

• Для удаления очереди писем в Postfix:

$ postfix flush (или postfix -f)

• Посмотреть очередь писем:

$ mailq

Пример результата выполнения команды:

postqueue: warning: Mail system is down -- accessing queue directly
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
CC83910135C      539 Sun Jul  1 18:31:21  root
                                          root

EC2B61013DE      370 Sun Jul  1 18:38:21  root@bulkin.me

• Удалить все письма из очереди:

$ postsuper -d ALL

Пример результата выполнения команды:

postsuper: Deleted: 38 messages

• Удалить все письма в отложенной очереди:

$ postsuper -d ALL deferred

Исправление проблем с Windows Update

Иногда служба обновлений Windows ведет себя не так, как от нее ожидается – то одна ошибка выскочит, то другая. Информацию по коду ошибку можно найти в Google, но не всегда советы помогают в исправлении ситуации.

Microsoft также не осталась в стороне, и подготовила набор скриптов для «лечения» Windows Update, которые можно скачать здесь.

Исправление проблем с Windows Update

Еще один совет для удаления кеша файлов Windows Update в виде срипта:

net stop wuauserv
CD %Windir%
CD SoftwareDistribution
DEL /F /S /Q Download
net start wuauserv

[MongoDB] Удаление поля из коллекции

Допустим, в какой-то коллекции есть документы, содержащие поле, которое стало уже не нужным, и вы хотите удалить это поле из всех документов данной коллекции.

Для этого достаточно выполнить следующий запрос:

db.<collection>.update({}, {$unset: {<field_name>:1}} , {multi: true});

[MongoDB] Удаление поля из массива

В коллекции ‘payments’ имеется следующая структура данных:

"log" : [
        {
            "item_id" : "1478", 
            "method" : "card", 
            "cost" : 199.0, 
            "cr_time" : ISODate("2018-06-10T10:38:49.868+0000"), 
            "pay_time" : NumberLong(1528627129), 
            "rent_end_date" : ISODate("2018-07-10T10:38:49.000+0000")
        }
        ...
]

Необходимо удалить поле «rent_end_date» для «item_id» : «1478».

Решение:

db.payments.find({'log.item_id': '1478' }).forEach(function(doc) {
    var rentEndDate = doc.log;
    for(var i = 0; i &lt; rentEndDate.length; ++i) { 
        var x = rentEndDate[i];
        delete (x["rent_end_date"]);
 
    }
    db.payments.save(doc);
});

[Linux] Удаление содержимого файла

Есть несколько возможных команд, которые позволяют удалить содержимое файла:

  1. > filename
  2. cp /dev/null filename
  3. filename < /dev/null
  4. echo -n > filename
  5. truncate -s 0 filename

[Git] Warning: Unprotected Private Key File!

Если при попытке выполнить команду (к примеру, git fetch) будет выведена ошибка «Unprotected Private Key File!», то значит у вас выставлены некорректные права доступа:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/path/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
key_load_private_type: bad permissions
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
error: Could not fetch origin

Решение:

find /path/.ssh/id_rsa -type f -exec chmod 600 {} \;
find /path/.ssh/ -type d -exec chmod 700 {} \;

[MongoDB] Полезные запросы к БД

Изменение типа данных у поля:

db.collection_name.find().forEach( function (x) {
x.field_name = NumberLong(x.field_name);
db.collection_name.save(x);
});

Изменение содержимого поля у вложенного документа:

db.collection_name.update({"obj_name.1.field_name": "Содержимое"}, { $set: { "obj_name.1.field_name": "Тест для замены" } }, multi: true)

Удаление поля из коллекции:

db.collection_name.update({},{$unset: {field_name:1}}, {multi: true})

Изменение имени поля у вложенного документа:

db.collection_name.update({}, {$rename:{"obj_name.field_name_old":"obj_name.field_name_new"}}, false, true);