Я задаю этот вопрос после королевского уничтожения коробки с Linux. Позвольте мне дать вам некоторую предысторию, чтобы вы знали, откуда я.
В настоящее время у меня есть (ну ... есть) RedHat Linux, работающий под управлением Apache с Phusion Passenger для запуска Ruby Apps под Apache. Приложение действует в качестве службы для регулярного предоставления кэшированных файлов киоскам в районе Цинциннати. Веб-приложение работало отлично, и единственной оставшейся частью было настроить задачу cron для извлечения всей информации, которая должна быть кэширована, и упаковки ее в несколько различных пакетов обновлений для обслуживания киосков. Для этого я написал скрипт на Ruby, который будет обрабатывать выборку и упаковку данных. Чтобы настроить задачу cron, я просто использовал встроенный 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, и структура каталогов выглядела так:
.
|-- 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 часа ночи. На следующий день после составления расписания этой задачи я получил очень неприятный сюрприз. Задача cron была выполнена в корне, и я предполагаю, что большинство команд завершилось неудачно, за исключением chmod -R www.www *
который изменил владение всем в системе пользователю www
.
Мой вопрос Как правильно реализовать задачу cron и из какого контекста запускается задача cron? Теперь я понимаю, что мне, вероятно, не следует запускать это под учетной записью root
, и я не уверен, как запустить его под учетной записью www
поскольку у этого пользователя нет оболочки, и вы не можете успешно выполнить su
для пользователя www
.