내 가상 머신에 CentOS 7.6이 있습니다. 몇 가지 bash 스크립트가 있으며 /opt
이 사용자로 이를 실행해야 합니다 dbuser
. 이러한 스크립트는 출력을 폴더에 기록합니다. 이를 사용하여 crontab에 crontab -e
넣어 매분 실행되도록 했습니다.dbuser
* * * * * /opt/share/scripts/Connections
* * * * * /opt/share/scripts/Memory
* * * * * /opt/share/scripts/Regular
출력 폴더를 확인하면 매분 변경되지 않습니다. 스크립트를 수동으로 실행하면 문제 없이 실행되고 출력이 올바르게 업데이트됩니다.
이 스크립트에 대한 모든 디렉터리와 하위 디렉터리를 확인했는데 모두 전체 x
권한이 있습니다.
이는 /var/log/cron
명령이 실행되었으며 오류가 없음을 의미합니다. 변경할 때마다
서비스도 다시 시작합니다. 나는 또한 다음을 시도했습니다:crond
* * * * * /usr/bin/bash /opt/share/scripts/Connections
* * * * * /usr/bin/sh /opt/share/scripts/Connections
* * * * * dbuser /opt/share/scripts/Connections
아직 출력 폴더에 업데이트가 없습니다(이 명령은 수동으로 제대로 작동합니다).
마지막으로 루트 crontab에 이것을 추가했고 오류 없이 잘 작동했으며 출력 파일을 업데이트했습니다.
* * * * * /usr/sbin/runuser -l dbuser -c '/opt/share/scripts/Connections'
각 사용자의 crontab을 루트에 추가할 수 없습니다. 나는 그들이 자신의 crontab에 있기를 바랍니다. 왜 이런 일이 발생하며 어떻게 해결할 수 있나요?
고쳐 쓰다dbuser
스크립트는 사용자에게 쓰기 권한이 있는 위치에 씁니다. 나는 그것을 테스트했습니다.
사용자는 데이터베이스 사용자이므로 스크립트에 데이터베이스 명령에 대한 경로가 있습니다.
DB2PATH=/home/$username/sqllib/bin/db2
이를 cronjob에서 사용하는 경로에 추가해야 합니까?
아니요, 메일을 보내지 않습니다. 나중에 참조할 수 있도록 데이터베이스 상태 보고서를 생성합니다.
답변1
명령문을 통해 사용자를 정의합니다 su -
. 나는 원래 사용자 스크립트와 동일한 문제를 겪었습니다. 이것은 나에게 효과적이었습니다.
* * * * * root su - <username> -c "bash <script to run>"