2016-11-17 20 views
2

私はLinuxを学んでいるので、ここで明白な何かを見落としているかもしれないので、私にご負担ください。私は現在、カスタムシェルスクリプトを実行するためにcronジョブをセットアップしようとしています。このスクリプトは、ターミナルからうまく動作していますが、cronではなく動作しています。以下はその詳細です。私は経験豊富なユーザーからの洞察を感謝します。Linuxのミントでcrontabでシェルスクリプトが実行されていない

システム情報

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ジョブがあります。私はそれが実際に動作しているsyslogに見

# 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) 

任意のアイデア: のsyslogはこれを示して?

EDIT 01:

私はcronジョブを変更:

/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を:今、私はどこか、ログファイルが含む、/home/zion/crontab.logで作成されて取得しています

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

dateは認識されませんか?すべての

EDIT 02

おかげで、私はここにいくつかのことを学びました。ルスランが出pointendとして、私は2つの問題だった:

# 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

@ '/ usr/local/bin /'が '$ PATH'にある場合は必要ありません。 –

+0

@RuslanOsmanov、Cronのデフォルトパスは実装依存であり、ディストリビューション間で信頼できるものではありません。常により安全な側にいる方が良いです。 – bansi

答えて

2

:すべてが今取り組んでいる

ログファイルの場所のための

  • 不十分な権限を
  • 不十分なパスは、以下の最終cronジョブは、定義しますほとんどの場合、/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とP、 '/ bin'を' PATH'に含めます。ターミナルで 'which'コマンドを使用して、端末の位置を確認します。 「それ?」 –

+0

ああ!素晴らしい、ありがとう!したがって、crontabで定義されたパスは、システムのワイドパスに追加されませんが、上書きされますか? –

関連する問題