자동으로 조판하려는 LaTeX 파일이 포함된 여러 Git 저장소가 있습니다. 아이디어는 (1) 새 커밋을 가져오고 (2) 변경된 LaTeX 파일을 make all
호출해야 하는 이를 실행하는 각 저장소에서 실행되는 중앙 bash 스크립트(cronjob에 의해 실행)를 갖는 것입니다.latexmk
중앙 bash 스크립트에는 다음 줄만 포함됩니다.
bash ./repos/repo-xyx/cron.sh
그런 다음 repos/repo-xyz/cron.sh
이:
cd "$(dirname "$0")"
git pull
make all
cd -
그리고 같은 디렉토리의 Makefile에서:
all: $(subst .tex,.pdf,$(wildcard *.tex))
%.pdf: %.tex
latexmk -pdf -pdflatex="pdflatex -shell-escape" $< </dev/null
* * * * * bash .../cron.sh 2>&1 > .../cron.log
내 사용자의 crontab에는 및 가 있습니다 SHELL=/bin/bash
.
cronjob이 실행되면 로그에서 다음을 읽습니다.
Already up-to-date.
latexmk -pdf -pdflatex="pdflatex -shell-escape" myfile.tex </dev/null
.../ (this comes from the line "cd -")
보시 latexmk
다시피 호출되지만 아무 작업도 수행하지 않습니다. myfile.pdf
아무것도 생성되지 않습니다.
bash cron.sh
(동일한 사용자로) 최상위 디렉토리에서 실행 하면 다음과 같습니다.하다일하다.
cron 작업에서 bash 스크립트를 실행할 때 Makefile이 명령을 실행하지 못하게 하는 원인은 무엇입니까(적어도 make가 이 명령을 실행한다고 생각하지 않습니다)?
이것은 GNU Make 3.81에 있습니다 Linux ubuntu 3.13.0-51-generic #84-Ubuntu SMP Wed Apr 15 12:08:34 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
.
답변1
pdflatex
문제는 내 것으로 판명되었습니다 $HOME/.profile
. 그래서 cronjob을 다음과 같이 변경했습니다.
* * * * * . $HOME/.profile; bash .../cron.sh 2>&1 > .../cron.log