0

crontabを介して毎分実行するように設定したシェルスクリプトに特有の問題があります。

私はPelicanをブログプラットフォームとして使用しており、新しい投稿があるたびにサイトが更新される方法を半自動化したいと考えていました。これを行うためにrespawn、コンテンツと同じディレクトリで呼び出されるファイルを検索するスクリプトを作成しました(Dropboxを介して同期するため、サーバーと同期するファイルをそこに作成するだけです)。

スクリプトは、ファイルrespawnが存在する場合、ブログを再構築して削除するように記述されています。そうでない場合は、代わりに終了します。

これがというスクリプトですpublish.sh

#!/bin/bash
Respawn="/home/user/content/respawn"
if [ -f $Respawn ]
then
   sudo /home/user/sb.sh;rm $Respawn
else
    exit 0
fi
exit 0

これがシェルスクリプトのcrontabです

* * * * * /home/user/publish.sh

そして最後に、これがの内容ですsb.sh

make html -C /var/www/site/

これで、SSH経由でスクリプトを実行してrespawn存在する場合、それは完全に機能します。ただし、cronに実行させると、シェルスクリプトは実行されませんが、respawnファイルは削除されます。

4時間ごとに実行されるもう1つのcronジョブがあります。これは単純に実行sb.shされ、完全に機能します(何かを公開するのを忘れた場合に備えて)。

ユーザーのcrontabを使用し、代わりにrootに追加してみました。また、パスワードを使用せずに実行できるように、ユーザーをsudoersファイルに追加しました。どちらも機能していないようです。私は何かが足りないのですか?

4

2 に答える 2

1

でなければなりませんsudocronパスワードを入力できません。cronを実行しているユーザーのメールをチェックして確認します。のようなものsudo: no tty present

于 2013-03-26T12:29:31.810 に答える
0

に変更sudo /home/user/sb.sh;rm $Respawnしてみてください

/home/user/sb.sh;rm $Respawn

sudoとにかくrootとして呼び出されるため、このコンテキストでコマンドを実行する必要はありません。

于 2013-03-26T12:30:27.847 に答える