Я использую небольшой bash-скрипт для проверки статуса Postgresql и если по какой-то причине статус failed, отдается команда на start сервиса:
#!/bin/bash
if [ "$(systemctl is-active postgresql@10-main)" = "failed" ]; then
service postgresql@10-main start
fi
При проверке в консоли все ок - останавливаю postgresql, выполняю файл скрипта - все запускается нормально.
Но когда скрипт запускается через cron (для него использую системный), то сервер стартует, но затем сразу получает сигнал на выключение.
В логах это выглядит так:
2021-12-18 08:10:04.070 MSK [18362] LOG: listening on IPv4 address "0.0.0.0", port 5432
2021-12-18 08:10:04.070 MSK [18362] LOG: listening on IPv6 address "::", port 5432
2021-12-18 08:10:04.071 MSK [18362] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2021-12-18 08:10:04.171 MSK [18371] LOG: database system was shut down at 2021-12-18 08:05:04 MSK
2021-12-18 08:10:04.201 MSK [18362] LOG: database system is ready to accept connections
2021-12-18 08:10:04.275 MSK [18362] LOG: received smart shutdown request
2021-12-18 08:10:04.284 MSK [18362] LOG: worker process: logical replication launcher (PID 18378) exited with exit code 1
2021-12-18 08:10:04.288 MSK [18373] LOG: shutting down
2021-12-18 08:10:04.302 MSK [18362] LOG: database system is shut down
Я сначала подумал, что процесс с чем-то конфликтует и откуда-то прилетает SIGNAL на прекращение работы, поэтому запустил утилиту killsnoop-bpfcc, вот что она показала:
Не очень понял, какая картина в итоге получается, но проверил где находятся процессы с этими PID - в папке с упомянутым выше скриптом. Другие скрипты cron были отключены в это время.
Очевидно, что проблема не в самом скрипте (который прекрасно запускается из консоли), а в работе cron, но не могу понять в чем именно, гугл не помог.
Буду рад советам.