すべてのシェルスクリプトがcrontabを使用できるわけではありません。

すべてのシェルスクリプトがcrontabを使用できるわけではありません。

私はApacheを実行する小さなVPSとMinecraftサーバーを持っています。決してオフにはしませんが、何らかの理由で再起動すると、IPTablesはポート80を含むほとんどのポートをブロックします。この問題を解決するためにさまざまな提案を試しましたが、成功しませんでした。また、プロバイダがOVHなので、サポートが不足しています。

だから解決策を作成し、満足しています。再起動時に開く必要がある特定のポート(現在80および25565)を開くための単純なシェルスクリプトファイルを作成しました。 21、22などの重要な項目は再起動しても影響を受けません。

スクリプトは次のとおりです。

iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p udp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp --dport 25565 -j ACCEPT
iptables -I INPUT -p udp --dport 25565 -j ACCEPT
/sbin/service iptables save

を入力して手動で実行すると、/iptdef.sh正常に実行され、ポートも開いており、すべてが正常です。

もちろん、サーバーが再起動されるたびに覚えて実行するのは非現実的で、crontabを追加しました。問題は動作/実行されないことです。これは私のcrontabファイルです。

*/5 * * * * /backup2.sh
*/55 * * * * /backup3.sh
@reboot /iptdef.sh
* * * * *  /iptdef.sh

最初の2行は有効です。それは私のためにフォルダをバックアップする単純なスクリプトです。 2行目は機能しません。

cronでiptablesコマンドを実行できないことは可能ですか?愚かに聞こえるがうまくいかない他の理由はない。スクリプトに正しい権限があります。

答え1

PATHcronが強制に設定されているためです。スクリプトまたはcrontabで呼び出すか追加する/usr/bin:/bin必要があります。詳細については、crontab(5) を参照してください。iptables/sbin/iptablesPATH=/usr/sbin:/sbin:/usr/bin:/bin

答え2

ここでかなりよく説明されているようです。crontabの@rebootはrootにのみ適用されますか?デフォルトでは、答えは使用しているCronとLinuxのディストリビューションによって大きく異なります。

答え3

/etc/hosts私のサーバーのFQDNにいるすべての人に送信されたメールを解析するには、以下を追加する必要がありました。

127.0.0.1 mydomain.com.

最後に点に注意してください。私の場合、デフォルトではroot@localhostに電子メールを送信し、次のMAILTO=rootように翻訳されました。[Eメール保護]

この回答の詳細は次のとおりです。

関連情報