2017-12-28 10 views
0

기본적으로 Python 패키지, 바이너리 및 기타 지속적인 업데이트가 필요한 프로그램이 있으며 나는 crontab 항목을 만들 수 있는지 알고 싶습니다. 기본적으로 매월이 업데이트를 실행하는 BASH 스크립트를 실행하십시오. 나는이 목적을 위해 작성한 짧은 테스트 스크립트를 호출하는 crontab 항목을 성공적으로 만들었습니다. 스크립트는 문제가 아니지만 질문에 답하는 데 도움이된다면 다음과 같습니다. 의심 스럽습니다. 몇 시간 만 입력해야하는 경우 Crontab을 사용하여 패키지를 관리 할 수 ​​있습니까?

#!/bin/bash 

#Program update automator script 
#Leveraging crontab to update all my neuroimaging, python, and conda packages monthly without having to do it myself because I forget and am a lazy POS 
#Note - Am Using Conda and Pip for package management and not apt-get, which I don't think I have installed because I had read somewhere you can get discrepancies in processes if you have apt-get and one of the other ones both on the system 

#Created 12.27.17 
#Updated 12.27.17 

#Updates Conda itself and cleans unused packages and tarballs out 
conda update conda && conda update anaconda && conda clean --packages --tarballs 

#Update AFNI binaries 
@update.afni.binaries -defaults -do_extras 

#Updating important Python libraries 
conda update python ipython ipython-notebook matplotlib networkx numpy scipy sphinx traits dateutil nose pydot 

#Update Nipype libraries 
pip install --upgrade nibabel nipype rdflib nipy dipy pygraphviz graphviz 

난 그냥 그것이 오류없이 실행되었던 테스트,이 항목을 만들기 전에이 모든 명령을 실행했기 때문에

. 문제는 업데이트가 필요할 때만 업데이트를 실행할 때 전체를 얻는 것입니다.

다음 패키지가 업데이트됩니다 : 진행 ([y]/n)? y

사용자 입력이 필요합니다. 'y'를 입력하는 과정을 자동화 할 수있는 방법이 있습니까? 내가 볼 수있는 몇 가지 문제점이 있습니다.

  1. 가장 중요한 점은 입력이 필요한 지점에 도달하면 크론이 충돌한다는 것입니다. 나는이 자신을 아직 보지 못했지만 이것은 내가 읽은 것입니다.
  2. 나는 언제나 입력을 제공 할 필요가 있을지 잘 모르겠다. 어떤 명령은 업데이트가 필요하고 어떤 프로그램은 필요하지 않을지 항상 가변적이기 때문에, 나는 항상 3 'y를 입력 할 필요가 없다. '같은 명령이 실행에서 실행까지 동일한 입력을 필요로하는 것처럼 아닙니다.

이것은 나쁜 생각입니까? 다음과 같이

나의 현재 crontab 항목은 다음과 같습니다

0 10 1 * * source /Users/mycomputer/.bash_profile; /bin/sh /Users/mycomputer/Desktop/auto_package_updater.sh 

답변

1

crontab(5) 항목은 명령 (부팅시 @reboot로, 또는) 주기적으로 실행되도록 설명합니다. 이러한 명령은 % 문자로 대체하여 /bin/sh (POSIX 쉘, sh(1p) ... 참조)으로 해석됩니다.

이 명령은 대화 형 셸과 다른 환경 (environ(7) ... 참조)에서 실행됩니다. 따라서 auto_package_updater.sh 쉘 스크립트 (source /Users/mycomputer/.bash_profile 대신 이 정말 불량한 냄새가납니다 ...)에서 PATH variable (및 필요한 경우 다른 환경 변수, 예 : LD_LIBRARY_PATH)을 명시 적으로 설정해야 할 수도 있습니다.

는 크론은 (하지 않는 한 그것은 입력을 필요로하는 시점에 도달하면

아니오, cron(8) 부팅 시간 -에 init 또는 systemd에 의해 -started daemon이며, 충돌하고 충돌하지 않는다는 것입니다 당신은 cron 그 자체의 버그에 부딪혔다. 이것은 거의 없다.) 항상 실행됩니다 (충돌하는 경우 가능성이 낮기 때문에 나중에 crontab 작업을 실행할 수 없습니다). 무슨 일이 일어날 수있는 귀하의 특정 크론 작업이 차단됩니다 ...

'y'를 입력하는 과정을 자동화 할 수있는 방법이 있습니까?

당신과 출력 (pipe(7) 참조) (y 라인의 가능성이 무한 스트림을 방출) yes(1) 사용을 고려할 수 있습니다. (당신이 항상 원하는 확신하지만주의!?)

yes | pip install --upgrade nibabel nipype 

BTW, 내가하지 않다 : 예를 들어, pip install --upgrade nibabel nipypey 많은 사람들이 당신이 당신의 쉘 스크립트에 넣어 수 할 수 소프트웨어 업데이트를 전적으로 자동화하는 것이 좋습니다. 이 업데이트의 오류 또는 버그가있는 버전의 업데이트를 어떻게 처리 하시겠습니까? 내가 자동으로 다운로드하지만, 수동으로 업데이 트하는 것이 좋습니다 .... 그리고 아마 그 프로그램이 실행되는 동안 파이썬 프로그램을 업데이 트하지 말아야 ....

아마 당신은 자신의 업데이 트를 작성하고 싶지 shell script (타이핑을 피하기 위해 반복적 인 명령)을 실행하지만 update_my_python_packages 스크립트를 직접 실행하면 을 알고을 알면 그렇게하는 것이 합리적입니다.

+0

아, '크래시'에 사과드립니다. 나는 '멈춰라.'고 말해야했다. 내가 올바른 경로와 소싱을 통해 다음과 같이하면 이론적으로 'y'가 스크립트에 포함되지만 'y'를 입력하는 데 필요한 여러 인스턴스에서 작동 할 것입니다. * * * * * y | myscript.sh 자동으로 업데이트하는 것과 같이 가장 좋은 패키지가 무엇인지 잊어 버리기 때문에 좋을 것이라고 확신하지 못했습니다.하지만 가장 좋은 방법은 아닙니다. – chainhomelow

+0

멈추는 것은'cron' 데몬이 아니라, 특정하고 버그가 많은 cron 작업뿐입니다. 별로 중요하지 않습니다. –

+0

오 기다림, 파이핑 예 (1) 스크립트가 종료 될 때까지 'y'를 반복적으로 파이프합니까? (I.E. * * * * yes (1) | myscript.sh). 아, 제대로 이해하고 있다면 여러 개의 'y'가 필요합니다. 그러한 종류의 반복 된 입력이 의도하지 않은 행동을 유발할 수 있습니까? – chainhomelow

관련 문제