Почему мое приложение вылетает без обновления файла журнала (используется «& gt; my.log»)

Вот мой рецепт (протестировал его на двух ноутбуках Ubuntu 16.04):

Поместите этот скрипт где угодно (я положил его в root, /syspend.sh) и сделал его исполняемым (chmod +x /suspend.sh)

TIMELOG=/tmp/autohibernate.log
ALARM=$(tail -n 1 $TIMELOG)
SLEEPTIME=5000 #edit this line to change timer, e.g. 2 hours "$((2*60*60))"
if [[ $1 == "resume" ]]
then
    if [[ $(date +%s) -ge $(( $ALARM + $SLEEPTIME )) ]]
    then
        echo "hibernate triggered $(date +%H:%M:%S)">>$TIMELOG
        systemctl hibernate 2>> $TIMELOG
    else
        echo "normal wakeup $(date +%H:%M:%S)">>$TIMELOG
    fi
elif [[ $1 == "suspend" ]]
then
    echo "$(date +%s)" >> $TIMELOG
    rtcwake -m no -s $SLEEPTIME
fi

Затем создайте цель systemd: # touch /etc/systemd/system/suspend-to-sleep.target Вставьте это содержимое:

#/etc/systemd/system/suspend-to-hibernate.service
[Unit]
Description=Delayed hibernation trigger
Before=suspend.target
Conflicts=hibernate.target hybrid-suspend.target
StopWhenUnneeded=true

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/bash /suspend.sh suspend
ExecStop=/bin/bash /suspend.sh wakeup

[Install]
WantedBy=sleep.target
RequiredBy=suspend.target

Затем включите его # systemctl enable suspend-to-sleep.target.

Я столкнулся проблема на одном из ноутбуков: закрывающая крышка не запускала эту цель. Это было связано с xfce4-power-manager. Существует два способа решения этой проблемы. Первый - отредактировать файл /etc/systemd/logind.conf и заменить HandleLidSwitch=ignore на HandleLidSwitch=suspend. Но это будет системно, поэтому я просто добавил символическую ссылку на мой скрипт # ln -s /suspend.sh /etc/pm/sleep.d/0000rtchibernate

1
задан 13 April 2017 в 15:24

1 ответ

Я перенаправлял весь вывод в файл с помощью > my.log &, а затем с помощью tail -f my.log просматривал все сообщения. По какой-то причине все e.printstacktrace не были в my.log. Мне не хватало RuntimeException, а точный корень вызывал ArrayOutofboundException.

0
ответ дан 25 May 2018 в 08:43
  • 1
    Неясно, рассматривается ли это как объяснение проблемы или как указание на то, что вы еще не решили ее. Если последнее, то это должно быть редактирование вашего вопроса (и вы можете оставить комментарий к моему ответу, если хотите). Кроме того, обратите внимание, что вы приняли мой ответ, что означает, что этот вопрос считается «решенным». Если ни один из ответов здесь не достаточен для ваших нужд, я рекомендую отказаться от ответа (снова нажмите галочку), чтобы люди знали, что вы все еще ищете помощь. – Eliah Kagan 15 July 2012 в 20:54
  • 2
    Однако, если вы теперь знаете причину сбоя, вы должны сообщать об этом как ошибку , а не повторно открывать этот вопрос (поскольку Ask Ubuntu is не является хорошим местом для сообщения об ошибках ). – Eliah Kagan 15 July 2012 в 20:55
  • 3
    Спасибо за ваш отзыв. Я буду более осторожен с моими вопросами. Тем не менее, ваш ответ помог мне вернуться к моему приложению, а не искать ошибку в ОС. Мой ответ на мой вопрос - это просто способ помочь кому-то понять, что я сделал для решения моей проблемы, и явился основной причиной моей проблемы. Я не мог себе представить, что & gt; my.log, не будет захватывать сообщения e.printstacktrace. Слишком сообщить об этом, я бы сказал. Еще раз спасибо за вашу помощь. Это помогло. – Siddharth 15 July 2012 в 21:45
  • 4
    Сообщения об ошибках обычно записываются в stderr. > file перенаправляет только stdout, поэтому для получения вывода , перенаправленного в файл, используйте > file 2>&1 – geirha 15 July 2012 в 21:53

Другие вопросы по тегам:

Похожие вопросы: