すべてのシェルスクリプトが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

おすすめ記事