다목적 스크립트에서 crontab에 쓸 수 있습니까?

다목적 스크립트에서 crontab에 쓸 수 있습니까?

Unix cron을 조작하고 싶을 때 이렇게 합니다.

crontab -e

그런 다음 내 지침을 입력(또는 붙여넣기)하세요.

crontab에 지침을 붙여넣는 방법스크립트에서 직접?

즉, crontab -e 내부에 내용을 붙여넣고 싶지 않지만 자동화하기 위해 외부에서 내용을 붙여넣고 스크립트에서 준비된 상태로 저장하고 싶습니다.

새로운 VPS 환경(예: 새로운 Digital Ocean Droplet)을 만들 때마다 실행하는 다목적 스크립트에 대해 이 질문을 드리고 있습니다.


타자를 칠 수 있어요문서예를 들어:

sudo bash -c "touch /location/new_file && echo 'text...text...text...text' > /location/new_file

또는:

sudo cat <<EOF >> /location/new_file
text...
text...
text...
text...
EOF

하지만 스크립트에서 Crontab에 직접 쓰는 것이 가능한지, 어떻게 가능한지는 모르겠습니다.

이것은 스크립트에서 Cron 탭에 붙여넣고 싶은 작업입니다.

0 8 * * *  tar -zcvf /home/USER/backups/files/www-html-$(date +\%F-\%T-).tar.gz /var/www/html
0 8 * * *  find /home/USER/backups/files/* -mtime +30 -exec rm {} \;

0 8 * * *  mysqldump -u benia -p121212 --all-databases > /home/USER/backups/mysql/alldb_backup.sql
1 8 * * *  tar -zcvf /home/USER/backups/mysql/alldb_backup-$(date +\%F-\%T-).sql.tar.gz /home/USER/backups/mysql/alldb_backup.sql
2 8 * * *  rm /home/USER/backups/mysql/alldb_backup.sql
2 8 * * *  find /home/USER/backups/mysql/* -mtime +30 -exec rm {} \;

노트:

위의 cron 작업은 두 가지 작업을 수행합니다.

  1. 모든 사이트 디렉터리와 모든 SQL을 매일 2개의 다른 디렉터리에 백업합니다. 하나는 ~/backups/files이고 다른 하나는 ~/backups/sql입니다.
  2. 30일 전에 생성된 파일을 찾아 삭제하세요. --- 매일 새로 생성됩니다.

답변1

cron즉, 사용에 관한 Ipor Sircer의 답변을 기반으로 합니다 .

인간 크론탭:

   crontab [ -u user ] file

   The  first  form  of this command is used to install a new crontab from
   some named file or standard  input  if  the  pseudo-filename  ``-''  is
   given.

이것은 당신이 보낸다는 것을 의미합니다철사crontab 파일에 다음 명령을 추가하고 싶습니다.

crontab -

crontab이러한 명령이 포함된 새 cron 파일이 다시 생성됩니다.

  1. 스크립트는 먼저 기존 crontab 인쇄를 사용합니다 crontab -u $user -l 2>/dev/null.
    사용자의 값을 할당하거나 사용해야 합니다 $user( $USER해당 환경에 있는 경우).

  2. 원하는 새 줄을 인쇄하고 집계 결과를 stdin에 연결된 파이프에 캡처합니다 crontab -.


일반 스크립트에서는 다음과 같아야 합니다.

#!/bin/bash

user=YOU_NEED_TO_ENTER_YOUR_USER_HERE

# use a subshell to capture both commands output into the pipe (    # prints the current value of crontab
    crontab -u $user -l 2>/dev/null

    # print your cron jobs to STDOUT    
    cat <<- 'EOF'
        0 8 * * *  tar -zcvf /home/USERNAME/backups/files/www-html-$(date +\%F-\%T-).tar.gz /var/www/html
        0 8 * * *  find /home/USERNAME/backups/files/* -mtime +30 -exec rm {} \;

        0 8 * * *  mysqldump -u benia -p121212 --all-databases > /home/USERNAME/backups/mysql/alldb_backup.sql
        1 8 * * *  tar -zcvf /home/USERNAME/backups/mysql/alldb_backup-$(date +\%F-\%T-).sql.tar.gz /home/USERNAME/backups/mysql/alldb_backup.sql
        2 8 * * *  rm /home/USERNAME/backups/mysql/alldb_backup.sql
        2 8 * * *  find /home/USERNAME/backups/mysql/* -mtime +30 -exec rm {} \;
    EOF

# Everything printed to stdout - inside the subshell will be connected
# to the pipe and feed to crontab on stdin - recreating a new crontab ) | crontab -

답변2

인간 크론탭:

   crontab [ -u user ] file

   The  first  form  of this command is used to install a new crontab from
   some named file or standard  input  if  the  pseudo-filename  ``-''  is
   given.

관련 정보