4

スクリプトを実行しているときにcrontabに問題があります。

私のsudocrontab-eは次のようになります:

05 00 * * * /opt/mcserver/backup.sh
10 00 * * * /opt/mcserver/suspend.sh
05 08 * * * /sbin/shutdown -r +1
11 11 * * * /opt/mcserver/start.sh  <--- This isn't working

そして、start.shは次のようになります。

#!/bin/sh
screen java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui

これらの権限があります(ls -l出力)

-rwxr-xr-x 1 eve eve  72 Nov 24 14:17 start.sh

sudoを使用するかどうかに関係なく、ターミナルからコマンドを実行できます

./start.sh

しかし、それはcrontabで始まりません。私が行った場合

grep -iR "start.sh" /var/log

次の出力が得られます

/var/log/syslog:Nov 27 11:11:01 eve-desk CRON[5204]: (root) CMD (eve /opt/mcserver/start.sh)
grep: /var/log/btmp: Permission denied
grep: /var/log/lightdm/x-0-greeter.log: Permission denied
grep: /var/log/lightdm/lightdm.log: Permission denied
grep: /var/log/lightdm/x-0.log: Permission denied

だから私の質問は、なぜそれが機能しないのですか?また、スクリプトはsudoを使用せずに実行されるため、必ずしもsudo crontabに配置する必要はありませんか?

(そして私はUbuntu 12.10を使用しています)

よろしくお願いします、フィリップ


twalbergの応答への回答

1. Craftbukkitの所有者をrootに変更して、問題が解決したかどうかを確認します。

-rw-r--r-- 1 root root 12084211 Nov 21 02:14 craftbukkit.jar

また、start.shスクリプトに明示的なCDを追加しました。

#!/bin/sh
cd /opt/mcserver/
screen java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui

2.ここで何を意味するのかよくわかりません。Javaを起動するときに、start.shファイルで次のパスを使用する必要がありますか?(どのjavaからの出力

/usr/bin/java

3.サーバーが閉じると、画面が終了します。とにかく「デタッチモード」で画面を開始するのは良い考えですか?

それでも同じ「許可が拒否されました」エラーが発生しました。


問題は解決しました!以下のように、画面上で適切なフラグを使用することにより、正常に機能するようになりました。

screen -d -m java -d64 -Xincgc -Xmx2048M -jar craftbukkit.jar nogui

答えてくれた人たち、特にトワルバーグに感謝します!

4

3 に答える 3

1

start.shは「eve:eve」によって所有されており、crontabはrootとして実行されています。

次のコマンドを実行することでこれを解決できます

chown root:root /opt/craftbukkit/start.sh 

ただし、crontabはrootとして実行されます。

ヒント: crontabでbashを実行するときは、常に絶対パスを使用してください(デバッグがはるかに簡単になります)。

于 2012-11-27T10:37:55.413 に答える
1

確認すべき点は次のとおりです。

  1. root明らかにの読み取り/実行権限がありますが、 -start.shの権限は何ですか?それを読み取ることができますか?スクリプトに明示的なものを追加することもできます。craftbukkit.jarrootcd /path/to/where/craftbukkit.jar/isstart.sh
  2. javarootののデフォルトパスにありますcronか?このパスは、を介して取得したパスsudosuまたはルートとして直接ログインしたパスと必ずしも同じではないことに注意してください。通常は、はるかに制限されています。java両方にフルパス名を使用し、それcraftbukkit.jarを回避します。
  3. 利用可能な端末からscreenは起動しないため、代わりに必要になる場合がありscreen -d -m ...ます。うまくいけば、最終的に各インスタンスにアタッチしscreenて後で終了するか、スクリプトが完了したときに自動的に終了するように調整します...
  4. /var/log/syslogエントリは、実際にスクリプトを実行したことを示しているためcron、上記のいずれかの理由(または私がまだ気付いていない他の理由)で失敗したに違いありません。
  5. からの他のエラーはgrep、単に非rootユーザーがそれらの特定のファイルを読み取る権限を持っていないという事実によるものです(これは正常であり、良いことです)。
于 2012-11-28T17:55:18.057 に答える
0

ログには、ユーザーがdir "/ var /log/"にアクセスできないことが示されています。cronの所有者に対してログファイルの許可を設定する必要があります。

于 2012-11-27T10:43:09.330 に答える