쉘 스크립트에 Python 스크립트를 중첩하고 crontab을 사용하여 정기적으로 실행하고 cx_Oracle에 연결합니다.

질문: 셸을 사용하여 Python 스크립트를 예약하면 각각의 수동 실행이 성공할 수 있지만 crontab을 사용하여 정기적으로 스크립트를 실행하면 절반만 실행한 다음 종료할 수 있습니까? ? ?

crontab 타이밍 작업:

[root@7 jobshome]# crontab -l
*/10 * * * * sh /opt/jobshome/jsc_gsxj_132_to137.sh

쉘 스크립트:

#!/bin/bash
cd /opt/jobshome
python jsc_gsxj_y_20230403.py > /opt/jobshome/to137_gsxj.log &
exit 0

Baidu가 성공적으로 실행하기 위해 Python의 전체 경로를 작성해야 하는지 확인하고 다음과 같이 셸을 수정합니다. )

#!/bin/bash
cd /opt/jobshome
/usr/local/python3/bin/python3.9 /opt/jobshome/jsc_gsxj_y_20230403.py > /opt/jobshome/to137_gsxj.log &
sleep 10s
exit 0

하지만 전체 경로를 추가해도 여전히 문제가 해결되지 않고 여전히 이전과 동일하며 Python 스크립트의 실행은 Oracle 데이터베이스에 연결되면 자동으로 종료되고 계속 실행되지 않습니다.

끊임없는 모색과 노력 끝에 마침내 문제를 발견했습니다.

파이썬이 오라클 데이터베이스에 접속할 때 미리 환경변수를 불러와야 하는데, 파이썬의 오라클 모듈 cx_Oracle이 설치되어 있고, 리눅스의 오라클 시스템 환경변수도 설정되어 있지만, 여전히 다시 불러올 필요가 있다. 쉘 스크립트는 일정한 간격으로 자동으로 실행되며 환경 변수만 성공적으로 실행될 수 있으며 cx_Oracle의 매개 변수 파일을 찾을 수 있습니다.

수정된 쉘 스크립트는 다음과 같습니다.

#!/bin/bash
. /etc/profile
. ~/.bash_profile
cd /opt/jobshome
/usr/local/python3/bin/python3.9 /opt/jobshome/jsc_gsxj_y_20230403.py > /opt/jobshome/to137_gsxj.log &
exit 0

메모:

   1. 파이썬의 전체 경로 찾기:

      A. 첫 번째 방법:

whereis python

      실행결과 : 제가 원하는 파이썬 설치경로가 아니라 3.9 버전을 설치했는데 여기에서 2.7을 찾았습니다.

[root@7 lib]# whereis python
python: /usr/bin/python /usr/bin/python2.7 /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz

     b. 두 번째 방법: python3.9를 입력하고 경로를 인쇄합니다.

[root@7 jobshome]# python
Python 3.9.16 (main, Apr  8 2023, 11:34:07)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.path)
['', '/usr/local/python3/lib/python39.zip', '/usr/local/python3/lib/python3.9', '/usr/local/python3/lib/python3.9/lib-dynload', '/usr/local/python3/lib/python3.9/site-packages']
>>> exit()

Python 설치 경로 찾기: /usr/local/python3/lib/python3.9, bin 디렉터리를 검색하고 실행 명령 python3.9를 찾은 다음 Python 파일을 실행합니다.

2. Linux crontab 타이밍:

crontab -e
##是新建crontab任务
crontab -l
##是查看crontab任务列表

여전히 실행에 실패하면 다음 방법을 시도할 수 있습니다.

1. Python 파일 헤더에 Python 설치 디렉토리 경로를 추가합니다. 자신의 Python 경로를 찾는 방법은 위에 작성되었습니다.

[root@7 jobshome]# cat jsc_gsxj_y_20230403.py
#!/usr/local/python3/bin/python3.9 python

2. Python 스크립트가 오류를 보고하는 경우 모듈이 설치되었지만 찾을 수 없는 경우 등 모듈의 경로를 찾고 경로를 열고 모듈을 로드할 수 있습니다.

일반적으로 Python에 의해 로드된 모듈은 site-packages 폴더 아래에 있습니다. (위의 첫 번째 지점, 항목 b의 /usr/local/python3/lib/python3.9/site-packages)

import sys
sys.path.append('路径')

Guess you like

Origin blog.csdn.net/qq_52466976/article/details/130152379