Я думаю, что эта проблема была связана с установленным жестким диском или твердотельным накопителем.
Что я делаю, так это то, что в crontab у меня есть сценарий оболочки @reboot startup.sh
, который выполняется основным пользователем (uid 1000 ), и этот сценарий монтирует жесткий диск (, который он использовал. был хдд, теперь ссд):
sudo mount /dev/sdb1 /media/ssd1
Затем я создал shutdown.sh
скрипт, который выглядит следующим образом:
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Ensure that this is desired
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ""
echo "---- do you really want to shutdown/reboot? ----"
echo ""
read -n 1 -p "no, yes? (N/y) " ans;
case $ans in
y|Y) printf "\n\nok, preparing for shutdown/reboot\n\n";;
*) printf "\nok, exited\n\n"; exit;;
esac
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# DOCKER
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ''
echo '--| stopping docker portainer |--';
echo ''
docker stop portainer
... stop more containers
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Python
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ''
echo '--| killing all python processes |--';
echo ''
sudo pkill python
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# MongoDB
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ''
echo '--| exiting mongodb instances |--';
echo ''
mongod --dbpath /media/ssd1/data/mongodb/network/wiredTiger --shutdown
... stop more databases
echo ''
echo '--| deleting old mongodb logs |--';
echo ''
exec rm -rf {} \;"
sudo sh -c "find /media/ssd1/data/mongodb -type f -name 'log.txt.*' -exec du -ch {} + | sort -h"
sudo sh -c "find /media/ssd1/data/mongodb -type f -name 'log.txt.*' -exec rm -rf {} \;"
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Sync
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ''
echo '--| syncing discs |--';
sync
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# SSD
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ''
echo '--| unmounting ssd1 and hdd5-1 |--';
echo ''
sudo umount /media/ssd1/
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Ask for next step
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo ""
echo "---- ok, done. what next? ----"
echo ""
read -n 1 -p "exit, reboot, or shutdown? (E/r/s) " ans;
case $ans in
r|R) printf "\n\nok, rebooting\n\n"; sudo reboot </dev/null;;
s|S) printf "\n\nok, powering off\n\n"; sudo poweroff </dev/null;;
*) printf "\nok, exited\n\n"; exit;;
esac
С помощью этого я могу как выключить, так и перезагрузить систему. Так что, возможно, это было связано с тем, что диск явно не размонтировался, а также не выполнялась синхронизация перед выключением / перезагрузкой.
Как упоминалось в комментариях, я заметил, что один контейнер (RabbitMQ )создавал огромный файл журнала (, который вырос до 40 ГБ ). Возможно, синхронизация этого файла вызывала проблемы, когда он пытался синхронизировать его в почти выключенном состоянии. Но я не уверен, потому что у меня была эта проблема практически с самого начала, и, насколько я знаю, изначально я не запускал RabbitMQ.
Спасибо всем, кто уделил этому вопросу немного времени. Написав вопрос, я вспомнил, что изменил DNS в своем маршрутизаторе, поэтому я проверил, какой DNS используется моей машиной :cat /etc/resolve.conf
и обнаружил, что это тот, который определен в моем маршрутизаторе, я изменил его на 8.8.8.8, и теперь он работает как положено.