crontab -l의 출력을 파일로 리디렉션할 수 없습니다.

crontab -l의 출력을 파일로 리디렉션할 수 없습니다.

다음 명령을 사용하여 Crontab을 파일에 백업하려고 했습니다 crontab -l > backup/crontab. 그러나 이는 디렉토리에 빈 파일만 생성 backup하고 출력을 터미널에 인쇄하지 않습니다. 이 명령의 종료 코드는 입니다 0.

리디렉션 하지 않으면 crontab -l예상되는 출력을 얻습니다.

/5 * * * * /path/to/script
...

내 명령이 Crontab 내용을 파일에 쓰지 않는 이유는 무엇이며 이 작업을 수행하려면 어떻게 해야 합니까?

저는 Centos를 사용하고 7.7있으며 다음 버전의 Cron 패키지가 설치되어 있습니다.

crontabs-1.11-6.20121102git.el7.noarch
cronie-1.4.11-23.el7.x86_64
cronie-anacron-1.4.11-23.el7.x86_64

제가 사용하는 쉘은 GNU bash, version 4.2.46.

편집하다:

[user@host ~]$ crontab -l > backup/crontab
[user@host ~]$ ll backup
total 248K
drwx------. 28 user user 4,0K 31.10. 09:30 .
drwxr-xr-x.  7 user user 4,0K  1.10. 12:58 ..
-rw-rw-r--.  1 user user 0    31.10. 09:30 crontab
...

백업은 로컬 디렉터리이며 다음과 같은 Selinux 정책을 갖습니다 staff_u:object_r:user_home_t:s0.

편집 2:

crontab -l > /tmp/crontab직장 및 기타 위치에서도 쓰기 액세스가 작동하지만 대상이 내 홈 디렉토리 내에 있으면 실패합니다. selinux이것이 원인 인지 궁금합니다 .

답변1

콘솔 출력을 충실하게 리디렉션하려면 출력을 문자열로 저장하고 따옴표를 사용하여 다음과 같이 내용을 완전히 보존하십시오.

echo "$(crontab -l)" > backup/crontab

또는 댓글에 따르면 (충분히 빨리 생각하지 못했습니다. 죄송합니다!)

printf "%s\n" "$(crontab -l)" > backup/crontab

이렇게 하면 리디렉션된 출력이 어떤 방식으로든 해석되는 것을 방지할 수 있습니다(예: crontab 예제 시작 부분의 슬래시). "echo -e"는 이스케이프 시퀀스를 해석합니다. \n, \r, \t 등과 같은 문자 - 스위치 없이 "echo"를 사용하십시오.

대부분의 시스템에서는 사용하는 간단한 리디렉션(crontab -l > filename)을 사용하면 됩니다.

관련 정보