"crontab -e" 없이 "/var/spool/cron/crontabs/t"를 수동으로 만들고 편집할 수 있습니까?

"crontab -e" 없이 "/var/spool/cron/crontabs/t"를 수동으로 만들고 편집할 수 있습니까?

/etc/crontab명령 없이 수동으로만 편집할 수 있다고 들었습니다./etc/cron.d/*crontab"/etc/crontab" 및 "/etc/cron.d/" 아래의 파일을 편집하는 방법은 무엇입니까?.

crontab -e사용자별 crontab 파일을 생성하고 편집하려면 실행해야 합니까 /var/spool/cron/crontabs/?

crontab 파일을 수동으로 생성하고 편집할 수 있습니까 /var/spool/cron/crontabs/t?

수동 생성 및 편집으로는 수행할 수 없는 사용자별 crontab 파일을 데몬이 인식하고 로드할 수 crontab -e있도록 일부 작업이 수행되고 있습니까 ?cron

감사해요.

답변1

Vixie Cron을 사용하면 일반 파일일 뿐입니다. 올바른 권한만 있으면 필요에 따라 편집할 수 있습니다. Cron은 수정된 파일을 확인하고 crontab을 다시 로드합니다(1분마다 확인). 이 모든 것이 실제로 녹음되었습니다.cron 맨페이지 "설명" 섹션, 적어도 데비안에서는요.

하지만 정말 그러면 안됩니다.

첫째, 실제로는 그럴 필요가 없습니다. crontab으로 설치하려는 프로그램에 파일을 전달하기만 하면 됩니다 crontab. 그러면 Bob의 crontab으로 crontab -u bob FILE설치됩니다 . FILE그리고 표준 입력을 사용할 FILE수 있습니다 . -crontab 변경 사항을 스크립팅하려면 crontab -l -u boblist crontab을 사용하여 편집한 다음 다시 로드하면 됩니다. 예를 들어 루트 보유 기간이 짧은지 확인하기 위해 다음과 같이 (테스트되지 않은) 작업을 수행할 수 있습니다.

#!/bin/bash

while read -r -u 9 user; do
    {
        crontab -l -u "$user"
        printf '%s\n' '* * * * * fortune -o | mail -s "DegradedArray event on /dev/md0" root'
    } | crontab -u "$user" -
done 9< <(getent passwd | cut -d: -f1)

둘째, 위의 내용은 이렇게 하지 말아야 할 타당한 이유를 암시합니다. 이는 데비안의 크론과 함께 작업하는 것으로 문서화되어 있습니다. 그러나 다양한 크론이 있습니다. 예를 들어 RHEL은 다른 것을 사용합니다. Arch는 기본적으로 systemd 타이머를 사용하지만(systemd crontab-to-timer 브리지를 사용하는지 확실하지 않음) 다음 옵션을 제공합니다.5가지 다른 구현실제 Cron을 원한다면 선택할 수 있는 몇 가지가 있습니다. 어느 쪽이든 crontabcrontab을 사용하여 설치하면 작동하거나 최소한 오류 메시지와 함께 실패하므로 작동하지 않는다는 것을 알 수 있습니다. 휴대성이 더 좋습니다.

답변2

또한 보안상의 이유로 /var/spool/cron/crontabs/명명된 파이프를 통해서만 쓰기가 가능하다는 사실을 프로세스에 통보합니다 .rootcrontabcron/etc/cron.d/FIFO

따라서 crontab 항목을 추가하거나 수정하는 경우 변경 사항이 적용되려면 재부팅할 root때까지 기다려야 합니다 .cron

답변3

/var/spool/cron/crontabs/ 아래에 사용자별 crontab 파일을 만들고 편집하려면 crontab -e를 실행해야 합니까?

아니요

crontab 파일 /var/spool/cron/crontabs/t를 수동으로 생성하고 편집할 수 있습니까?

예, 하지만 이름이 인 사용자가 있는 경우에만 해당 t됩니다. 그럴 가능성은 거의 없습니다.

물론 다른 사람들이 지적했듯이 "선호되는" 방법은 를 실행하는 것입니다 crontab. 그러나 예를 들어 새 이미지를 생성 중이고 이러한 명령이 작동한다는 것을 이미 알고 있는 경우에는 이것이 필요하지 않습니다. 규칙은 다음과 같습니다.

  1. 이 파일은 기존 사용자의 이름으로 지정되어야 하며 해당 사용자를 대신하여 실행됩니다.
  2. 파일의 소유자는 user:crontab다음과 같습니다. 모드는 다음과 같습니다. 600( user사용자 이름과 파일 이름은 어디에 있습니까?)

확인이 필요하면 crontab -e( EDITOR변수 등을 설정한 후 export EDITOR=emacs) 실행하고 제안한 명령을 입력하십시오. 그러면 올바른 이름과 권한을 가진 파일이 생성됩니다. 이 파일을 편집하면 됩니다.

답변4

UBUNTU에서는 루트로 cron 작업을 생성하고 crontab -e를 사용하지 않고 다시 로드할 수 있습니다. 두 줄만 입력하면 됩니다.

echo '@reboot /etc/esperandoroute.sh' >> /var/spool/cron/crontabs/root

crontab -u root /var/spool/cron/crontabs/root
 
crontab -l

관련 정보