2016-11-17 1 views
2

저는 리눅스를 배우기 때문에 여기서 명백한 것을 간과 한 것처럼 나와 함께하시기 바랍니다. 현재 사용자 지정 셸 스크립트를 실행하도록 cron 작업을 설정하려고합니다. 이 스크립트는 터미널에서 제대로 실행되지만 cron을 통해 실행되지는 않습니다. 다음은 세부 사항입니다. 숙련 된 사용자의 통찰력에 감사드립니다.crontab via Linux Mint에서 쉘 스크립트가 실행되지 않습니다.

시스템 정보

RELEASE=17.3 
CODENAME=rosa 
EDITION="Cinnamon 64-bit" 
DESCRIPTION="Linux Mint 17.3 Rosa" 
DESKTOP=Gnome 
TOOLKIT=GTK 
NEW_FEATURES_URL=http://www.linuxmint.com/rel_rosa_cinnamon_whatsnew.php 
RELEASE_NOTES_URL=http://www.linuxmint.com/rel_rosa_cinnamon.php 
USER_GUIDE_URL=help:linuxmint 
GRUB_TITLE=Linux Mint 17.3 Cinnamon 64-bit 

사용자 정의 쉘 스크립트

위치 : /usr/local/bin/make_ls_files.sh

내용 :

#!/bin/bash 

# test script to echo ls stout to files 
# (learning cron jobs) 

# tilde path not working in cron, trying full path 
# ls > ~/ls_file_$(date +%F_%H-%M-%S).log 
ls > /home/zion/ls_file_$(date +%F_%H-%M-%S).log 

전대 t 터미널에서 잘 실행되면 (cwd에서) 출력은 ls/home/zion/ls_file_2016-11-17_17-38-37.log 파일을 출력합니다.

는 지금, 나는 설정 crontab -e를 통해 cron 작업이 : 나는 그것이 실제로 실행에있는 시스템 로그에서 볼

# create text files every minute: 
PATH=/usr:/usr/bin:/usr/local/bin 
* * * * * make_ls_files.sh >> /usr/local/bin/make_ls_files_log.log 2>&1 

있지만 출력 또는 로그 항목이 생성되지 않습니다. 시스템 로그 방송이 : 왜 작동 방법 디버깅하는 방법하지 않습니다에 관한

... 
Nov 17 17:42:01 zion-VirtualBox CRON[4845]: (zion) CMD (make_ls_files.sh >> /usr/local/bin/make_ls_files_log.log 2>&1) 
Nov 17 17:42:01 zion-VirtualBox CRON[4844]: (CRON) info (No MTA installed, discarding output) 
Nov 17 17:43:02 zion-VirtualBox CRON[4850]: (zion) CMD (make_ls_files.sh >> /usr/local/bin/make_ls_files_log.log 2>&1) 
Nov 17 17:43:02 zion-VirtualBox CRON[4849]: (CRON) info (No MTA installed, discarding output) 

어떤 아이디어?

편집 01 : 포함,

* * * * * make_ls_files.sh 2>>$HOME/crontab.log 

지금 어디 선가 얻고, 로그 파일이 /home/zion/crontab.log에 생성됩니다 :

/usr/local/bin/make_ls_files.sh: line 6: date: command not found 
/usr/local/bin/make_ls_files.sh: line 6: ls: command not found 

ls

나는에 cron 작업을 변경 date이 인식되지 않습니까? 모든

EDIT 02

덕분에, 나는 여기에 몇 가지를 배웠습니다. 루슬란 밖으로 pointend으로 나는이 문제를 가지고 :

# create text files every minute: 
PATH=/bin:/usr:/usr/bin:/usr/local/bin 
# * * * * * make_ls_files.sh >> /usr/local/bin/make_ls_files_log.log 2>&1 
* * * * * make_ls_files.sh 2 >> $HOME/crontab.log 
+1

crontab에서'make_ls_files.sh '에 대한 전체 경로를 사용해야합니다. * * * * * /usr/local/bin/make_ls_files.sh >> /usr/local/bin/make_ls_files_log.log 2> & 1' – bansi

+0

@ bansi,'/ usr/local/bin /'이'$ PATH'에있는 경우 필요하지 않습니다. –

+0

@RuslanOsmanov, Cron의 기본 경로는 구현에 따라 다르며 배포판 간에는 신뢰할 수 없습니다. 그래서 항상 안전한면에 있어야합니다. – bansi

답변

2

: 모든 지금 노력하고 있습니다

로그 파일 위치에 대한

  • 불충분 한 권한을
  • 부족 경로는 아래의 최종 cronjob에,있는 정의 대부분 /usr/local/bin 디렉토리에 쓸 수있는 권한이 없습니다. 터미널에서 touch /usr/local/bin/myfile을 실행하면 쉽게 확인할 수 있습니다.

    정확한 이유를 찾으려면 오류를 로그 파일로 리디렉션해야합니다.

    스크립트의 모든 실행 파일이 PATH, 즉 PATH 목록에있는 디렉토리를 통해 사용 가능한지 확인하십시오.

    PATH=$PATH:/bin:/usr:/usr/bin:/usr/local/bin 
    * * * * * make_ls_files.sh >> /tmp/make_ls_files_log.log 2>>$HOME/crontab.log 
    

    주, 적어도 쓰기 필요 (w)과 로그 파일 디렉토리의 실행 (X) 권한!

    또한 Cron 구현은 crontab을 통해 PATH 환경 변수를 무시해야합니다. 그렇지 않으면 모든 실행 파일에 절대 경로를 지정해야합니다. (단지 명령을 사용하기 전에)

    export PATH=$PATH:/bin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin 
    

    를 또한 다음과 같이 쉘 스크립트에 PATH을 조정할 수 있습니다.

    P.S .: 터미널에서 which 명령을 사용하여 명령의 위치를 ​​감지합니다. which ls.

+0

네가 맞아, 나는'/ usr/local/bin'에 쓸 권한이 없다고 가정하고, 로그 파일 경로를 변경하고 출력을 얻는다. 위의 편집을 참조하십시오. –

+0

@ B-and-P는'/ bin'을'PATH'에 포함시킵니다. 터미널에서'which' 명령을 사용하여 터미널이 위치한 곳을 확인하십시오. '어느정도입니까? ' –

+0

아하! 훌륭해, 고마워! 그래서 crontab에 정의 된 경로가 시스템의 넓은 경로에 추가되지는 않지만 무시됩니까? –

관련 문제