Назад | Перейти на главную страницу

Переименование файлов cron

Будет ли переименование файла cron в / var / spool / cron / означать, что содержимое файла cron больше не будет выполняться? Или все файлы в / var / spool / cron / будут выполнены, независимо от имени файла.

Файлы в / var / spool / cron (или / var / spool / cron / crontabs или / var / spool / cron / tabs в некоторых системах) будут запускаться с разрешениями пользователя, для которого файл назван. Например, / var / spool / cron / root будет запускаться как пользователь «root», а / var / spool / cron / tom_13 будет запускаться как пользователь «tom_13».

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

  1. Если вы переименуете crontab в имя файла, которое не соответствует допустимому пользователю, я не знаю, каково ожидаемое поведение. Он может запускаться как root, он может запускаться как пользователь, владеющий файлом, или может не запускаться вообще.
  2. Некоторые демоны cron не проверяют / var / spool / cron на наличие изменений, если вы не внесете эти изменения с помощью crontab команда. Если вы собираетесь вносить изменения вручную, вам может потребоваться перезапустить демон cron, чтобы они вступили в силу.

Проверьте страницу руководства для crontab (man 1 crontab), чтобы увидеть, как это работает. Если вы используете Vixie cron (который в наши дни, похоже, отдают предпочтение большинству дистрибутивов Linux), вы можете сделать следующее, чтобы crontab одного пользователя запускался от имени другого пользователя (такой же эффект, как и переименование файла, но безопаснее):

  1. Сохраните crontab старого пользователя в файл: crontab -u olduser -l > olduser.cron
  2. Импортируйте его в crontab нового пользователя: crontab -u newuser olduser.cron
  3. Удалите crontab старого пользователя: crontab -u olduser -r

Cron затянут в / etc / crontab, где происходит вся магия. Фактически, по умолчанию crontab имеет только одну запись, подобную этой:

-*/15 * * * *   root  test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1

Как видите, это будет запускать / usr / lib / cron / run-crons каждые 15 минут, а run-crons на самом деле является скриптом.

Бегло взглянув на скрипт, вы увидите, в каких каталогах должны храниться скрипты cron:

for CRONDIR in /etc/cron.{hourly,daily,weekly,monthly} ; do

Копнув глубже и проверив, о чем идет речь, вы можете увидеть, что да, он выполнит все скрипты в соответствующих каталогах:

for SCRIPT in $CRONDIR/* ; do
    test -d $SCRIPT && continue
    case "$SCRIPT" in
           .svn)           continue ;;
           *.rpm*)         continue ;;
           *.swap)         continue ;;
           *.bak)          continue ;;
           *.orig)         continue ;;
           \#*)            continue ;;
           *~)             continue ;;
    esac

... кроме упомянутых расширений файлов. Таким образом, вы можете просто добавить «.bak» в конец файла, чтобы cron не выполнял его.

ПРИМЕЧАНИЕ: этот пост написан с использованием OpenSUSE, и для других дистрибутивов все может отличаться.

Человек cron говорит следующее:

   Cron searches /var/spool/cron for crontab files which are named  after
   accounts  in /etc/passwd; crontabs found are loaded into memory. Cron
   also searches for /etc/crontab and the files in the /etc/cron.d direc-
   tory,  which  are  in  a different format (see crontab(5)).  Cron then
   wakes up every minute, examining all stored  crontabs,  checking  each
   command  to  see if it should be run in the current minute.  When exe-
   cuting commands, any output is mailed to the owner of the crontab  (or
   to  the  user named in the MAILTO environment variable in the crontab,
   if such exists).

   Additionally, cron checks each minute to see if its spool  directoryâs
   modtime  (or  the modtime on /etc/crontab) has changed, and if it has,
   cron will then examine the modtime on all crontabs  and  reload  those
   which  have  changed.   Thus  cron  need  not  be restarted whenever a
   crontab file is modified.  Note that the  Crontab(1)  command  updates
   the modtime of the spool directory whenever it changes a crontab.

Так что, если я правильно интерпретирую это, переименование несуществующего пользователя поможет ..

Если вы хотите предотвратить его запуск, можно отредактировать crontab для этого пользователя и закомментировать все строки:

sudo crontab -u username -e

и ставьте # в начале каждой строки, в которой его нет.