Из того, что контекст является выполняемой задачей крона?

Я задаю этот вопрос после королевского уничтожения поля Linux. Позвольте мне дать Вам некоторый фон, таким образом, Вы знаете, куда я происхожу из.

Я в настоящее время имею (хорошо... имел), поле RedHat Linux рабочий Apache с Пассажиром Phusion, добавленным для того, чтобы запустить Приложения Ruby под Apache. Приложение действует как услуга для обслуживания кэшируемых файлов Киоскам в области Цинциннати регулярно. Работавшее отлично веб-приложение и единственная оставленная часть должно было настроить задачу крона получить всю информацию, которая должна была кэшироваться и пакет это в несколько различных пакетов обновления для обслуживания к киоскам. Для выполнения этого, я записал сценарий Ruby, который обработает выборку и упаковку данных. Для установки задачи крона я просто использовал встроенный crontab. Сценарий был похож так:

#!/bin/bash

cd ../lib
ruby pdf_cache.rb
ruby pdf_prepare.rb
ruby rss_cache.rb
ruby nightly-pack.rb 
cd ..
chown -R www.www *

Этот сценарий был расположен в папке крона, и структура каталогов была похожа так:

.
|-- cron
|-- feeds
|-- lib
|   `-- trash
|-- logs
|-- nightly-packs
|-- pdf
|   `-- tank
|-- public
`-- tmp

и я работал crontab -e как root со следующим содержанием:

0 3 * * * /usr/local/apache2/ruby_projects/kiosk/cron/schedule_job

Который должен выполнить сценарий каждый день в 3:00. На следующий день после планирования этой задачи крона, я получил очень неудачное удивление. Задача крона выполнялась в корне, и я предполагаю, что большинство команд перестало работать, за исключением chmod -R www.www * какое измененное владение всего в системе к www пользователь.

Мой вопрос; что надлежащий путь состоит в том, чтобы реализовать задачу крона и от того, от какого контекста задача крона выполняется? Я понимаю теперь, когда я, вероятно, не должен выполнять это под root учетная запись, и я не уверен, как выполнить ее под www считайте, поскольку у того пользователя нет оболочки, и Вы не можете успешно su к www пользователь.

5
задан 18.09.2016, 03:39

2 ответа

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

Задачи крона работают при пользователях, которые сделали задачу Крона, так же вот почему она работает как root.

2
ответ дан 07.12.2019, 17:38

Другое предложение: добавить -e к строке хижины на сценариях как это (т.е. #!/bin/bash -e). Это заставит сценарий выйти, если какая-либо команда в нем перестанет работать. Это не гарантирует, что у Вас не будет неприятных неожиданностей, но это помешает сценарию работать полностью от направляющих (так сказать) и предотвратит много видов отказов цепной реакции.

4
ответ дан 07.12.2019, 17:38

Теги

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