다음 명령을 사용하여 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)을 사용하면 됩니다.