次のスクリプトを実行するためにcronjobを設定しようとしています。このスクリプトの機能は、WordPressディレクトリでpngとjpgファイルを見つけて圧縮することです。
#!/bin/bash
echo `date` >> /root/optipng.log
find /home/ghost/wp-content/uploads -mtime -2 -iname '*.png' -print0 | \
xargs -0 optipng -o7 -log /root/optipng.log -preserve
echo `date` >> /root/jpegoptim.log
find /home/ghost/wp-content/uploads -mtime -2 -iname '*.jpg' -print0 | \
xargs -0 jpegoptim --max=90 --preserve --totals >> /root/jpegoptim.log
だからファイルを作成しました」最適化.sh「/usr/localディレクトリから実行」クローンタップ-e「と言って、次のコマンドを追加しました。
00 10 * * * root /usr/local/optimize.sh
これは毎日10時に画像最適化を実行するようになっていますが、この場合は機能しません。上記のコマンドを次のように変更してログファイルを生成してみました。
00 10 * * * root /usr/local/optimize.sh &>/var/log/cron.log
ログファイルが空で、クローンジョブが実行されていません。 Stack Overflowで言及されている他の方法を試しましたが、そのうち何も機能しないようです。また、助けを得るために見つけた他のチュートリアルもリストしました。
https://askubuntu.com/questions/28995/setup-cron-weekly-backup
http://seravo.fi/2013/tips-to-optimize-images-for-faster-loading-websites
誰かがエラーがどこにあるかを指摘できますか? :)
PS - /usr/local/optimize.shファイルに700の権限を与え、sshを介して直接ファイルを実行しようとしましたが、次のエラーが返されました。
/bin/bash^M: bad interpreter: No such file or directory
以下は、Nanoエディタを使用してコマンドを作成する方法を正確に示す図です。
この質問は、次のStack Overflowの他の質問とは異なります。このcrontabジョブが実行されないのはなぜですか?ある意味では、cronファイルを書く方法によってエラーが発生するのではなく、Optimization.shファイルに隠された空白がいくつかあります。
答え1
それでも多くの問題があります。
Windowsコンピュータで罰金を生成し、サーバーにコピーしました。 「テキスト転送」モードがない場合、各行はCR / LFの終わりに残ります。他の人が提案したように、
dos2unix
ファイルを実行すると問題が解決します。他の人がすでに提案したように、#!から先行する空白行を削除します。
/var/log/cron.log に書き込まないでください。これはシステムログファイルなので、記録しないでください。
chmod -R 777
単一のファイルを実行可能にするために使用しないでください。その代りchmod 755
またはよりよいchmod a+x
。crontab -e
他の人は、システムを使用するときに誰が誰であるかを知っているので、crontab
ユーザー名をフォーマットに含めないでください。echo `date`
単に考えるよりもdate
。
答え2
アップデート(チャットから):
ご質問の冒頭にスペースが表示されます。#!/bin/bash
スペースがないことを確認してください。また、WindowsからLinuxにコピーした場合は、次のコマンドを実行してすべての^M
文字を削除してスクリプトを再実行してみてください。
sed -i s/{ctrl+v}{ctrl+m}// /usr/local/optimize.sh
またはすでにdos2unix
実行している場合:
dos2unix /usr/local/optimize.sh
毎週金曜日の午前10時にこのタスクを実行します。
私の考えでは、あなたが望むものは次のとおりです。
00 10 * * * /usr/local/optimize.sh > /var/log/cron.log 2>&1
答え3
クローンラインの形式が正しくありません。例は次のとおりです。
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
つまり、ユーザーの名前を指定せずに /etc/crontab に行を追加する場合にのみ、ユーザー名を入力します。ただし、これを使用すると、crontab -e
現在のユーザーのcrontabファイルに追加されます。