Как правильно редактировать файл crontab?

52

Я пытаюсь автоматизировать обновление awstats для своего веб-сервера и понимаю, что мне нужно использовать cron для его настройки. Так у каждого пользователя есть файл crontab?

Я следовал инструкциям здесь сообщества / AWStats

И он говорит, чтобы перейти к файлу по адресу: /etc/crontab

Этот файл уже содержит некоторую информацию. Это основной crontabфайл или что-то? Я видел некоторые инструкции онлайн, чтобы использовать файл, который выскакивает crontab -e.

Как правильно использовать файл и как это сделать?

Если я запланирую задачу как мой пользователь без полномочий root, будет ли она выполняться сама по себе в указанный промежуток времени без проблем?

Нужно ли перезагружать сервер после сохранения задания cron в crontabфайле, прежде чем он начнет работать?

timbram
источник

Ответы:

50

Как правильно использовать файл и как это сделать?

crontab -e это лучший способ сделать это - это позволит вам легко редактировать пользовательские crontabs.

Если я запланирую задачу как мой пользователь без полномочий root, будет ли она выполняться сама по себе в указанный промежуток времени без проблем?

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

Как правило, лучше всего запускать запланированные задачи с наименьшими привилегиями, с которыми вы можете уйти, поэтому, если то, что вы делаете, не требует root, не используйте root. Если вам даже не нужно иметь доступ к файлам и папкам вашей учетной записи, вы можете создать нового пользователя и использовать эту учетную запись только для этой задачи. С другой стороны , если ваша задача действительно требует корня, кронтаба использовать суперпользователь ( su/ sudo suс корнем затем использовать crontab -e).

Нужно ли перезагружать сервер после сохранения задания cron в файле crontab, прежде чем он начнет работать?

Нет, он начнет работать сразу (ну, в следующий возможный запланированный раз).

Почему бы не редактировать файл напрямую? Где он расположен?

Пользовательские файлы crontab находятся в нем /var/spool/cron/crontabs, но их права доступа установлены таким образом, что к ним нельзя обратиться без разрешения суперпользователя (но когда он открыт и процесс cron теряет привилегии, он все равно может получить доступ к файлу).

Система не предназначена для того, чтобы конечные пользователи могли редактировать эти файлы напрямую, и в самом верху файла имеется строгое DO NOT EDIT THIS FILEпредупреждение в верхней части этого эффекта. Вместо этого файл предназначен для редактирования, с помощью crontab -eкоторого настраивается временное зеркало файла /tmpдля редактирования - без строгого предупреждения - после чего он проверяет и устанавливает сам постоянный файл crontab. Все это может быть сделано без разрешения суперпользователя.

Если бы вы редактировали файл crontab напрямую, я не знаю, каков будет результат. Возможно, это просто не вступит в силу до следующего перезапуска, и любые ошибки могут быть трудно отладить.

thomasrutter
источник
5
crontab -eпозволяет редактировать ваш пользовательский crontab без sudo. Пользовательские crontabs находятся в /var/spool/cron/crontabsкаталоге, к которому нельзя получить доступ без разрешения суперпользователя (но таким образом, что, когда cron откажется от привилегий, он все равно сможет его прочитать). Даже если вы используете sudo, чтобы попытаться отредактировать файл напрямую, вы увидите большое предупреждение вверху: «НЕ РЕДАКТИРОВАТЬ ЭТОТ ФАЙЛ» - файл предназначен для редактирования с помощью crontabкоманды, которая использует временную копию /tmpи затем устанавливает это после сохранения.
Томасруттер
25

У каждого пользователя есть свое crontab.

Чтобы увидеть это просто введите

crontab -l

и, да, вы видели это правильно, когда вы хотите добавить, а crontabзатем просто сделать

crontab -e

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

Сам crontab работает так

MIN =  Minute 0-60
HOUR = Hour [24-hour clock] 0-23
MDAY = Day of Month 1-31
MON = Month 1-12 OR jan,feb,mar,apr ...
DOW =  Day of Week 0-6 OR sun,mon,tue,wed,thu,fri,sat
COMMAND = Command to be run Any valid command-line

Так, например, чтобы запускать работу каждые 15 минут только в понедельник, вы делаете это так

*/15 * * * mon /home/me/yourscript.sh

и ДА очень важно, чтобы вы поместили свой cronjob в crontab пользователя, у которого достаточно прав для его выполнения.

Так что если ваш скрипт должен быть пользователем root или специальным пользователем, убедитесь, что su для этого пользователя и добавьте туда cronjob.

Также очень важно!

Кронджоб тупой! Да, я сказал это. Обязательно вводите полный PATH для того, который application/command/scriptвы используете, потому что crontab не будет работать с .bashrcили подобным. Вы всегда должны убедиться, что сообщаете cron, где он может найти файлы и каталоги.

Чтобы ответить на остальные ваши вопросы:

Конечно, он будет работать сам по себе, вот для чего он. Но вы должны проверить, что cronjob действительно делает это, или если он что-то упустил. Например, войдите в файл журнала, чтобы увидеть, действительно ли он работает.

И НЕТ, перезагрузка не нужна. Перезагрузка с Linux обычно требуется только в том случае, если вы устанавливаете новое ядро. Чтобы использовать его, вам нужно перезагрузить компьютер. Почти все остальное можно сделать без перезагрузки в Linux. Конечно, есть исключения, но в целом это утверждение верно.

s1mmel
источник
чтобы проверить свой формат времени, просмотрите этот сайт crontab.guru
Astm