Будет ли переименование файла 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 переименован другим допустимым пользователем, он должен запускаться от имени этого пользователя. Однако есть два предостережения:
crontab
команда. Если вы собираетесь вносить изменения вручную, вам может потребоваться перезапустить демон cron, чтобы они вступили в силу.Проверьте страницу руководства для crontab (man 1 crontab
), чтобы увидеть, как это работает. Если вы используете Vixie cron (который в наши дни, похоже, отдают предпочтение большинству дистрибутивов Linux), вы можете сделать следующее, чтобы crontab одного пользователя запускался от имени другого пользователя (такой же эффект, как и переименование файла, но безопаснее):
crontab -u olduser -l > olduser.cron
crontab -u newuser olduser.cron
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
и ставьте # в начале каждой строки, в которой его нет.