crontab에서 셸 스크립트를 예약했지만 실행되지 않고 있으며 crontab에서 사용하고 있는 동일한 명령을 수동으로 실행하려고 하면 아래 오류가 표시됩니다.
nohup ./home/rahul/data_script/data_backup_scripts/data_backup.sh /home/rahul/data_script/data_backup_scripts/data.param > /home/rahul/data_script/data_backup_scripts/log/nohup.$(date --iso).out
nohup: ignoring input and redirecting stderr to stdout
nohup: failed to run command ‘./home/rahul/data_script/data_backup_scripts/database_backup.sh’: No such file or directory
하지만 성공적으로 실행 중인 crontab을 통해 예약된 다른 작업이 있고 아래와 같이 작업을 트리거하고 있습니다.
nohup sh /home/rahul/ddl_script/ddl_backup/ddl_backup.sh /home/rahul/ddl_script/ddl_scripts/data.param > /home/rahul/ddl_script/ddl_scripts/log/nohup.$(date --iso).out
이 문제를 해결하도록 도와주세요. 이 위치에서 ls를 실행하면 이 위치에 있는 스크립트를 볼 수 있고 폴더와 하위 폴더에도 777 권한이 있습니다.
/home/rahul/data_script/data_backup_scripts/database_backup.sh
답변1
먼저 ./home에서 점을 삭제해야 합니다.
/home/rahul/data_script/data_backup_scripts/data_backup.sh
이 점은 실제 폴더를 참조하는 데 사용되지만 전체 경로로 작업을 수행할 때 실제 폴더 아래에 하위 마스터 폴더 구조가 없으면 필요하지 않습니다.
리디렉션과 관련하여 실제 문장을 호출하고 실행하는 스크립트를 만드는 것이 좋습니다. cron 내에서 리디렉션을 수행했지만 추적하고 테스트하기가 어렵습니다. 따라서 기능을 캡슐화하고 개별적으로 테스트하는 스크립트를 만든 다음 cron에서 호출하세요.
마지막으로 nohup의 사용에 관해서는 서비스에 의해 실행되기 때문에 cron에서는 사용할 필요가 없으므로 실행 중에 로그아웃할 수 있는 방법이 없습니다.
답변2
nohup 명령은 다음과 같아야 합니다.
nohup /home/rahul/data_script/data_backup_scripts/data_backup.sh /home/rahul/data_script/data_backup_scripts/data.param > /home/rahul/data_script/data_backup_scripts/log/nohup.$(date --iso).out &
"."을 클릭하면 성공적으로 실행하려면 루트 디렉터리 "/"에 있어야 합니다. 또한 nohup은 백그라운드에서 명령을 실행하지 않는 한 별 의미가 없으므로 끝에 "&"가 표시됩니다.
답변3
/home 앞의 점이 잘못되었습니다. 삭제하세요.
리디렉션을 수정했으므로 필터링과 같이 보다 유연하게 로깅을 관리할 수 있도록 더 짧은 crontab 파일을 허용하는 중간 스크립트를 사용하는 것을 고려해 보겠습니다.