Скрипт не запускается через crontab, но отлично работает автономно

У меня есть скрипт, который напоминает мне перезапустить мой компьютер, если uptime больше, чем, скажем, 3 дня (хотя сейчас он установлен на 0 дней, просто чтобы проверить, работает ли скрипт, так как мой компьютер работал только через день..).

Я понимаю, что это не самый элегантный сценарий, но я пытаюсь! :)

#!/bin/bash

up=$(uptime | grep "day" > /home/username/uptime.foo && awk < /home/username/uptime.foo '{ print $3 }')

[[ $up -gt 0 ]] && xmessage -center "Restart!"

Я сделал его исполняемым с помощью chmod + x checkup.sh, и он отлично работает, когда я запускаю его из терминала через ./checkup.sh

Моя запись в crontab для этого скрипта:

46 14 * * * /home/username/Desktop/./checkup.sh

Таким образом, он работает в 14: 46 часов ежедневно ...

1113 Итак ... Я думаю, что это должно сработать, если я не сделал что-то действительно глупое. Кроме того, как вы думаете, можно ли переместить этот скрипт bash в /bin?

52
задан 10 December 2018 в 00:03

3 ответа

Одна вещь за один раз:

Сначала давайте дадим Вам основанную на пользователе папку мусорного ведра:

cd ~/ && mkdir bin

Вы хотите использовать crontab. Давайте запустимся с чего-то действительно простого:

* * * * * touch /tmp/testing.txt

Хорошо, так, чтобы работы

Теперь давайте попытаемся запустить скрипт, который делает то же

* * * * * /home/username/bin/touchtest.sh

работать однажды минута, пока Вы не получаете его работа
Нет Вам не нужен./посреди строки../, для того, когда Вы даете относительные URL.
Хорошо, так, чтобы работы

Теперь давайте попытаемся запустить скрипт, который называет xmessage

* * * * * /home/username/bin/rebootwarn.sh

не работа

Сначала мы не должны зависеть от переменных среды. Это включает установку пути, x11 настройки или что-либо еще (Python, и рубиновые переменные среды приходят на ум...),

Давайте сделаем наш взглядом немного как надлежащий файл крона anacron.. Я сохранил это как тест

#Borrowed from anacron
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
#End borrowed from anacron

* * * * *   /bin/bash /home/username/bin/test.sh

Набор для выполнения однажды минута

crontab test импортировать его

На сценарии

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export DISPLAY=:0.0
up=$(uptime | grep "day" > /home/dnaneet/uptime.foo && awk < /home/dnaneet/uptime.foo '{ print $3 }')

[[ $up -gt 0 ]] && xmessage -center "Restart!"`

Хорошо, так, чтобы работы..., что мы делали?
Мы изменили все команды для не зависимости от путей, которые мы явно не устанавливали
Мы запустили наш скрипт явно с ударом
Мы сказали сценарию, что ожидаем быть ДЕМОНСТРИРУЮЩИЕСЯ:0.0

71
ответ дан 10 December 2018 в 00:03

Проблема была решена, читает руководство в Google:

описание:

  1. У меня есть использование сценария #!/bin/bash как заголовок
  2. Я поставил сценарий /home/wc3/palert/

анализ:

  1. crontab не может запустить мой скрипт
  2. Но если я работаю вручную, это показывает вывод, и также я вижу результат в своей сети
  3. Это означает, что crontab не может получить среду не как то, когда Вы запускаете свой скрипт на Вашей папке сценария

ответ:

  1. поместите свою среду с помощью этой строки ниже на сценарии с:

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/wc3/palert
    

    измените это: /home/wc3/palert
    с: место, что Вы помещаете свой сценарий, например. /home/budi/script.sh

образец:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/budi
# Script continues...

Попробуйте помещает Ваш сценарий на crontab.

11
ответ дан 10 December 2018 в 00:03

В моем случае все было из-за того, что не загружается профиль на первое место. Так что просто используйте -l или --login. Вот так @reboot bash -l /path/to/scirpt.sh >> /tmp/some.log

0
ответ дан 1 April 2020 в 16:14

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

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