Как выполнить скрипт оболочки с помощью crontab? [Дубликат]

Нет ничего пропавшего. Float был разработан для случая, когда вы хотите, чтобы изображение (например) сидело рядом с несколькими абзацами текста, поэтому текст обтекает изображение. Этого не произойдет, если текст «растянет» контейнер. Ваш первый абзац закончится, а затем ваш следующий абзац начнется под изображением (возможно, несколько сотен пикселей ниже).

И именно поэтому вы получаете результат.

4
задан fedorqui 27 April 2016 в 11:39
поделиться

2 ответа

Как видно из комментариев, проблема заключается в том, что вы не определяете, какую программу следует использовать для выполнения сценария. Учтите, что cronjob выполняется в крошечной среде; там не так много можно предположить. Вот почему мы определяем полные пути и т. Д.

Итак, вам нужно сказать что-то вроде:

1 * * * * /bin/sh /var/www/html/dbsync/dbsync.sh /var/www/html/dbsync
#         ^^^^^^^

/bin/sh, являющегося двоичным файлом, который вы хотите использовать для выполнения сценария.

В противном случае вы можете установить разрешения на выполнение сценария и добавить заголовок shell-script , сообщающий ему, какой интерпретатор использовать:

#!/bin/sh

Если вы сделать это, добавление пути двоичного файла не требуется.

Из Устранение общих проблем с заданиями cron :

Использование относительных путей. Если ваше задание cron выполняет какой-либо скрипт, вы должны обязательно использовать только абсолютные пути внутри этого скрипта. Например, если ваш скрипт находится в /path/to/script.phpand, вы пытаетесь открыть файл с именем file.php в том же каталоге, вы не можете использовать относительный путь, например fopen (file.php). Файл должен быть вызван из его абсолютного пути, например: fopen (/path/to/file.php). Это связано с тем, что задания cron не обязательно запускаются из каталога, в котором находится скрипт, поэтому все пути должны быть вызваны специально.


Кроме того, я понимаю, что вы хотите запустить этот каждую минуту. Если это так, 1 * * * * не будет. Intead, он будет запускать каждые 1 минута каждый час . Поэтому, если вы хотите запускать его каждую минуту, скажите * * * * *.

6
ответ дан Community 19 August 2018 в 05:22
поделиться
  • 1
    Спасибо @fedorqui Это работает совершенно нормально, я буду помнить, какую программу следует использовать для выполнения скрипта. – sanainfotech 27 April 2016 в 11:35
  • 2
    @sanainfotech приветствуется :) Вы предоставили много подробностей, поэтому я попытался сделать общий ответ достаточно, чтобы использовать его в качестве ссылки в других случаях. – fedorqui 27 April 2016 в 11:45

Важно понимать «login shell» и «интерактивная оболочка», что они означают.

  • login shell: коротко, когда вы входите в сеанс ssh и получаете окно терминала, где вы могут вводить команды оболочки. После входа в систему система выполняет некоторые файлы (.bashrc) и задает для вас переменные среды, такие как переменная PATH.
  • интерактивная оболочка: после входа в систему вы можете запускать вручную терминалы (ы) оболочки. Система выполняет некоторый файл профиля, назначенный вашей учетной записи (.bash_profile, .bash_login, .profile). Эти файлы также устанавливают некоторые переменные среды и инициализируют переменную PATH для вашего открытого сеанса оболочки.

С помощью ОС начались сценарии оболочки, а задания cron не соответствуют указанному выше способу для запуска оболочки. Поэтому никаких системных сценариев (.bashrc) или профилей пользователей не выполняется. Это означает, что наша переменная PATH не инициализируется. Команды оболочки не могли найти, потому что переменная PATH не указывает на нужные места.

Это объясняет, почему ваш скрипт работает успешно, если вы запускаете его вручную, но не удается, когда вы запускаете его через crontab.

Решение-1: Используйте абсолютный путь для каждой команды оболочки вместо имени команды, используемой в вашем файле сценария.

  • вместо «awk» использовать " / usr / bin / awk "
  • вместо« sed »использовать« / bin / sed »

Решение-2: Инициализировать переменные среды и особенно переменную PATH до выполнение сценариев оболочки!

1
ответ дан sanmega 19 August 2018 в 05:22
поделиться
  • 1
    Поскольку в самом crontab можно установить PATH (даже в начальных записях, но вверху файла - любые пары key=value автоматически экспортируются в среду), этот ответ, похоже, не позволяет явно обсуждать такой простой подход к выполнению того, что он командует. – Charles Duffy 14 March 2018 в 15:04
Другие вопросы по тегам:

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