cron에서 괄호와 중괄호가 예상대로 작동하지 않습니다.

cron에서 괄호와 중괄호가 예상대로 작동하지 않습니다.

루트 사용자에 대해 다음 crontab을 설정했습니다.

root@curie:/usr/home/username # crontab -l
# /etc/crontab - root's crontab for FreeBSD
#
# $FreeBSD: release/10.0.0/en_US.ISO8859-1/books/handbook/config/chapter.xml 43126 2013-11-07 16:37:11Z gabor $
#
#
SHELL=/bin/sh
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
#
#minute  hour  mday    month   wday    who     command
#
41       13    *       *       *       root    ( /usr/local/bin/mysqldump --default-character-set=utf8mb4 rt5 --tables sessions --no-data --single-transaction ; /usr/local/bin/mysqldump --default-character-set=utf8mb4 rt5 --ignore-table rt5.sessions --single-transaction ) | /usr/bin/gzip > /home/username/rt-db-backups/rt-`/bin/date +\%Y\%m\%d`.sql.gz

rt-20210916.sql.gz작업이 실행 중인 것으로 보이지만 예상한 파일이 생성되지 않았습니다.

# ls -la rt-db-backups/
total 5392
drwxr-xr-x  2 username    username        512 Sep 16 13:40 .
drwxr-xr-x  5 username    username        512 Sep 15 14:57 ..
-rw-r--r--  1 root        username    2693630 Sep 16 10:25 rt-20210915.sql.gz

로그를 확인하여 조사를 시도했지만 /var/run/cron명령이 실행 중인 것으로 표시됩니다.

# tail /var/log/cron
Sep 16 13:40:00 curie /usr/sbin/cron[7387]: (root) CMD (/usr/libexec/atrun)
Sep 16 13:40:34 curie crontab[7390]: (root) BEGIN EDIT (root)
Sep 16 13:40:42 curie crontab[7390]: (root) REPLACE (root)
Sep 16 13:40:43 curie crontab[7390]: (root) END EDIT (root)
Sep 16 13:41:00 curie /usr/sbin/cron[876]: (root) RELOAD (tabs/root)
Sep 16 13:41:00 curie /usr/sbin/cron[7396]: (root) CMD (root    ( /usr/local/bin/mysqldump --default-character-set=utf8mb4 rt5 --tables sessions --no-data --single-transaction ; /usr/local/bin/mysqldump --default-character-set=utf8mb4 rt5 --ignore-table rt5.sessions --single-transaction ) | /usr/bin/gzip > /home/username/rt-db-backups/rt-`/bin/date +%Y%m%d`.sql.gz)
Sep 16 13:41:32 curie crontab[7403]: (root) LIST (root)
Sep 16 13:44:00 curie /usr/sbin/cron[7406]: (operator) CMD (/usr/libexec/save-entropy)
Sep 16 13:45:00 curie /usr/sbin/cron[7415]: (root) CMD (/usr/libexec/atrun)

()cron에서는 앰퍼샌드 {}기호가 작동하지 않는 것 같나요 ?

실제로 다음과 동일한 cron 명령을 작성하려면 어떻게 해야 합니까?

( /usr/local/bin/mysqldump --default-character-set=utf8mb4 rt5 --tables sessions --no-data --single-transaction ; /usr/local/bin/mysqldump --default-character-set=utf8mb4 rt5 --ignore-table rt5.sessions --single-transaction ) | /usr/bin/gzip > /home/username/rt-db-backups/rt-`/bin/date +%Y%m%d`.sql.gz

다음을 시도했지만 그 중 하나도 작동하지 않았습니다.

{ /usr/local/bin/mysqldump --default-character-set=utf8mb4 rt5 --tables sessions --no-data --single-transaction ; /usr/local/bin/mysqldump --default-character-set=utf8mb4 rt5 --ignore-table rt5.sessions --single-transaction ; } | /usr/bin/gzip > /home/username/rt-db-backups/rt-`/bin/date +\%Y\%m\%d`.sql.gz

답변1

@steeldriver 님 말씀이 맞습니다. /etc/crontab이 루트 사용자의 crontab(who 필드를 포함하지 않음)과 다르기 때문에 잘못된 형식을 사용했습니다.

관련 정보