@reboot crontab только работает на корень?

На самом деле серверы приложений как JBoss обеспечивают функциональность, подобную (но не то же как), что Вы просите: процесс Java работает в фоновом режиме, и можно дать этому команду запускать подприложение. Оборотная сторона этого подхода, однако, то, что подприложения не запускаются как отдельные процессы, таким образом, они безопасно не разделяются: если Вы разрушаете VM, или называете System.exit () или решаете прервать () все Потоки, все другие подприложения также затронуты.

65
10.09.2014, 04:41
9 ответов

Это может быть чем-то вроде запутывающей темы, потому что существуют различные реализации крона. Также было несколько ошибок, которые повредили эту функцию, и существуют также некоторые варианты использования, где она просто не будет работать, конкретно если Вы сделаете завершение работы/начальную загрузку по сравнению с перезагрузкой.

Ошибки

точка данных № 1

Одна такая ошибка в Debian покрыта здесь, названа: крон: задания @reboot не выполняются. Это, кажется, сделало, это - путь в Ubuntu также, которую я не могу подтвердить непосредственно.

точка данных № 2

Доказательство ошибки в Ubuntu, казалось бы, было бы подтверждено здесь в этом ТАК названные Вопросы и ответы: @reboot cronjob не выполняющийся.

выборка

комментарий № 1:.... 3) Ваша версия crond не может поддерживать @reboot, Вы использующий crond vix?... покажите результаты crontab-l-u пользователь

комментарий № 2:... это могла бы быть хорошая идея настроить его как init сценарий вместо того, чтобы полагаться на определенную версию @reboot крона.

комментарий № 3:... @MarkRoberts удалил перезагрузку и изменил 1 * * * * к */1 * * * *, проблема решена! Куда я отправляю представителю pts Mark?Спасибо!

Принятый ответ, в котором Вопросы и ответы также имели этот комментарий:

Кажется мне, Lubuntu не поддерживает @Reboot синтаксис Крона.

Дополнительное доказательство

точка данных № 3

Поскольку дополнительное доказательство там было этим потоком, что кто-то делал попытку той же самой вещи и расстраивался, что это не работало. Это названо: Поток: Крон - @reboot задания, не работающие.

выборка

Ре: Крон - @reboot задания, не работающие

Кавычка, Первоначально Отправленная Сообщением Представления ceallred, Это уничтожает меня... Попробованный сценарий обертки. Выполнение вручную генерирует файл журнала... перезагружающий, и задание не выполняет или создает файл журнала.

Системный журнал показывает, что КРОН выполнил задание..., но снова, никакой вывод и процесс не работает. 15 июля 20:07:45 крон RavenWing [1026]: (КРОН) ИНФОРМАЦИЯ (Работающий @reboot задания) 15 июля 20:07:45 КРОН RavenWing [1053]: (ceallred) CMD (/home/ceallred/Scripts/run_spideroak.sh> /home/ceallred/Scripts/SpiderOak.log 2> &1 и)

Это, кажется, что крону не нравится команда @reboot.... Какие-либо другие идеи?

Хорошо... Частично решенный. Я отмечу этого, как решено и начну новую дискуссию с новой проблемой.....

Я думаю, что ответ был моим зашифрованным корневым каталогом, не был смонтирован, когда CRON пыталась запустить скрипт (сохраненный в/home/username/scripts). Перемещенный в/usr/scripts и прогоны задания как ожидалось.

Таким образом, теперь это, кажется, проблема spideroak. Процесс запускается, но к тому времени, когда процесс начальной загрузки закончен, он пошел. Я предполагаю катастрофический отказ по некоторым причинам.... Новый поток, чтобы спросить об этом.

Спасибо за всю справку!

После того как это выше пользователя выяснило его проблему, которую он смог получить @reboot работа из crontab записи пользователя.

Я не совсем уверен, какая версия крона используется на Ubuntu, но это, казалось бы, указало бы, что пользователь может использовать @reboot также, или что ошибка была исправлена в какой-то момент в последующих версиях крона.

точка данных № 4

Я протестировал на CentOS 6 следующее, и он работал.

Пример

$ crontab -l
@reboot echo "hi" > /home/sam/reboot.txt 2>&1

Я затем перезагрузил систему.

$ sudo reboot

После перезагрузки.

$ cat reboot.txt 
hi

Возьмите aways

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

Для больше о том, как фактический механизм работает на @reboot Я действительно сталкивался с этим сообщением в блоге, которое обсуждает внутренности. Это названо: @reboot - объяснение простого волшебства крона.

Отладка crond

Можно поднять многословие crond путем добавления следующего к этому конфигурационному файлу на RHEL/CentOS/Fedora основывал дистрибутивы.

$ more crond 
# Settings for the CRON daemon.
# CRONDARGS= :  any extra command-line startup arguments for crond
CRONDARGS="-L 2"

Допустимые уровни 0, 1, или 2. Для возвращения этого файла назад к, он - уровень входа по умолчанию, просто удаляют "-L 2" когда Вы сделаны, отладив ситуацию.

48
27.01.2020, 19:32
  • 1
    Вчера Получил комментарий, посмотрел на Ваш ответ и решил ответить мне после хорошего ночного сна. Настройте VM, повторил @reboot, хотел отправить мой ответ и только затем видел, что Вы 'перефразировали' свой :-( –  Anthon 18.01.2014, 07:55
  • 2
    @Anthon ответа - извините, я быстро ответил на это вчера и затем продолжил исследовать его и нашел очень конфликтующие детали. Когда я нашел ошибку на Debian об этом и Ubuntu, ТАКИМ ОБРАЗОМ, я понял часть из того, что было приведено в действие. Я видел, что это работало над CentOS и помещало его вместе это @reboot в порядке в определенных кронах и по-видимому багги/повреждать в других. Следовательно беспорядок. –  slm♦ 18.01.2014, 08:01
  • 3
    Кроме этого OP обеспечивает мало детали, можно легко использовать что-то, что еще не работает (во время начальной загрузки) в сценарии, которые делают, это перестать работать или иметь его находится на еще смонтированном диске. Мой ответ, который прокомментированный OP, был подтвержден третьей стороной также. Это - проблема черного лебедя... –  Anthon 18.01.2014, 08:07
  • 4
    @Anthon - да, одна из моих точек данных была точно этим. @reboot работавший, после того как Вы поняли, что это пыталось получить доступ к зашифрованному диску, который не был смонтирован на данный момент. –  slm♦ 18.01.2014, 08:10
  • 5
    Вы могли бы хотеть указать, что ошибка в Ubuntu легко решена путем добавления задержки: @reboot sleep 60; <your command>. Заключить поток в кавычки, "мое предположение - то, что @reboot директива крона работает слишком рано в процессе начальной загрузки" –  pzkpfw 19.02.2015, 23:30

Возьмите новую установку Ubuntu Gnome 13.10 (пользователь по умолчанию в моем случае: avanderneut).

avanderneut@uggo:~$ crontab -l
no crontab for avanderneut
avanderneut@uggo:~$ crontab -e
no crontab for avanderneut - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.tiny

Choose 1-3 [2]: 3
crontab: installing new crontab
avanderneut@uggo:~$ crontab -l | tail -2
# m h  dom mon dow   command
@reboot /home/avanderneut/bin/on_reboot
avanderneut@uggo:~$ vi /home/avanderneut/bin/on_reboot
avanderneut@uggo:~$ more !$
more /home/avanderneut/bin/on_reboot
#! /bin/bash
echo "Reboot script" > /var/tmp/xxx
avanderneut@uggo:~$ chmod 755 /home/avanderneut/bin/on_reboot
avanderneut@uggo:~$ ls /var/tmp
avanderneut@uggo:~$ /home/avanderneut/bin/on_reboot
avanderneut@uggo:~$ ls /var/tmp
xxx
avanderneut@uggo:~$ rm /var/tmp/xxx
avanderneut@uggo:~$ sudo reboot
[sudo] password for avanderneut: 

И посмотрите, что после перезагружают файл /var/tmp/xxx есть ли, хотя это там прежде не перезагружало.

Это было сделано с версией 3.0 крона.

Необходимо удостовериться, что никакие сервисные диски и т.д. не используются, который не мог бы быть доступным в то время выполнения сценария. Запустите с чего-то простого как вышеупомянутое и удостоверьтесь, что оно не имеет никакого терминального вывода, как электронная почта, вероятно, не и выполнение.

Вы могли бы aslo нуждаться в более актуальном кроне (или обновление из Linux оракула), если бы это не работало на Вас, и Вам нужна эта функция.

1
27.01.2020, 19:32
  • 1
    я обновил свой OP для ответа на вопросы. Оказывается, что Ваше подозрение было с самого начала: будущее выполнение сценария на перезагрузке находится на монтируемом /dev/mapper/VolGroup00-LogVol01 раздел. –  Withheld 24.01.2014, 14:56
  • 2
    @Daniel спасибо за то, что сообщили мне, я рад, что Вы нашли преступника. Я не уверен, можно ли задержать запуск крона, пока разделы не смонтированы, часть того запуска сделана параллельно, и необходимо было бы изменить зависимости. Я не хотел бы смешивать с тем и возможным повреждением cron. Необходимо, по моему скромному мнению, следовать другим маршрутом, чем crontab и @reboot для выполнения чего-то однажды на запуске как пользователь. –  Anthon 24.01.2014, 15:15

Я обнаружил, что на моей машине Ubuntu у меня нет доступа к службам dns, пока, во время @reboot time. Это не позволяло мне монтировать удаленные тома. Это банальное, но простое решение сработало:

@reboot sleep 60 && /home/me/bin/mount.sh 2>&1 >> /home/me/reboot.log

(в root cron; последние части только для отладки)

13
27.01.2020, 19:32

У меня тоже Mac OSX, и у меня была такая же проблема, когда мой скрипт не работал. но когда я исправил свой сценарий на

@reboot   cd /home/me/  && sh myscript.sh

, у меня все заработало. убедитесь, что ваш файл оболочки исполняется, выполнив команду

chmod +x myscript.sh
3
27.01.2020, 19:32

Я не знаю, решали ли вы уже это, или если вам нужно какое-либо из вышеперечисленных решений, но есть и другая возможность:

если ваш каталог /home зашифрован, он может быть недоступен до тех пор, пока вы не войдете в систему, т. е. он недоступен при перезагрузке.

В этом сценарии вы можете переместить свои скрипты в другое место, например /srv или /opt или /usr/local/bin/ и т. д.

3
27.01.2020, 19:32

pruebas:

usuario@ubuntu :~$ touch script.sh usuario@ubuntu :~$ chmod +x script.sh

usuario@ubuntu :~$ $crontrab -e

@reboot /home/usuario/script.sh

guarda y reinicia tu pc

-2
27.01.2020, 19:32

Я бы сказал «да» на этот вопрос. Просто были трудности с запуском cron при перезагрузке (Debian 3.10.70 )и удалось решить с помощью:

@reboot root /usr/bin/python3 /path/to/script

И символ новой строки '\n' в конце

Это содержимое файла:

/etc/cron.d/runOnReboot

Наконец, я думаю, стоит отметить реферат изman 5 crontab

... The format of a cron command is very much the V7 standard, with a number of upward-compatible extensions. Each line has five time and date fields, followed by a command, followed by a newline character ('\n'). The system crontab (/etc/crontab) uses the same format, except that the username for the command is specified after the time and date fields and before the command. The fields may be separated by spaces or tabs. The maximum permitted length for the command field is 998 characters. ...

0
27.01.2020, 19:32

Прежде всего, вы должны войти в систему как пользователь root:

sudo -i

Затем откройте crontab:

crontab -e

После этого добавьте свой скрипт в crontab как root, как показано ниже:

@reboot root /home/user1/Desktop/my_script

В результате я убедился, что мой скрипт работает правильно.

Примечание. :Если вы редактируете crontab под своим текущим пользователем, перезагрузка не сможет правильно вызвать ваш сценарий.

0
27.01.2020, 19:32

Я использую, как показано ниже

export EDITOR=gedit && sudo crontab -e
@reboot /home/usuario/script.sh
0
22.05.2020, 03:12

Теги

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