Script sh exécuté par cron qui ne s’exécute pas

Bonjour à tous (C’est mon 1er post ici !)

Pour supprimer toutes les régles iptable, j’utilise le script /root/raz-iptable.sh (voir plus bas).
En ligne de commande pas de pb mais avec cron cela ne fonctionne pas.

39 9 * * * root sh /root/raz-iptable.sh

cron.log:

Mar 25 09:39:01 ns0000000 CRON[3853]: (root) CMD (root sh /root/raz-iptable.sh)

Un iptables -L montre que les règles sont toujours actives

raz-iptable.sh:

#!/bin/sh
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

Une idée !?
Merci d’avance
Philippe

Bonjour,

La commande root sh /root/raz-iptable.sh semble erronée. Il faut l’utiliser dans un terminal pour s’en convaincre.
Lui préférer sh /root/raz-iptable.sh ?

Bonjour,

Dans quel fichier est ta tâche cron, et quel est son contenu complet ?

Le truc classique c’est qu’une tâche cron est exécutée dans un shell non connecté et non interactif, et donc les variables d’environnements ne sont pas renseignées. En particulier PATH.
Donc soit tu précises la valeur de PATH dans ton fichier cron :
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
soit tu utilises les emplacements complets des exécutables dans ton script : /usr/sbin/iptables

Bonjour, merci de répondre.

J’ai ajouté « root » pour indiquer/forcer l’utilisateur qui exécute la commande.
Mais même simplement :
39 9 * * * sh /root/raz-iptable.sh
ne fonctionne pas

En lisant différent post sur Internet le pb peut venir du path, j’ai modifié mon script mais pas mieux
#!/bin/sh
/sbin/iptables -F

J’ai aussi ajouté à la fin du script, pour voir s’il s’exécute:

date >> /root/ls.txt

mais pas d’évolution de /root/ls.txt

;(
Ph.

Bonjour, merci de répondre.

Ayant déjà ajouté /sbin/…
j’ai complété avec
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

Mais pas mieux !

#!/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
date >> /root/ls.txt
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -t nat -F
/sbin/iptables -t nat -X
/sbin/iptables -t mangle -F
/sbin/iptables -t mangle -X
/sbin/iptables -P INPUT ACCEPT
/sbin/iptables -P FORWARD ACCEPT
/sbin/iptables -P OUTPUT ACCEPT
date >> /root/ls.txt

Ph.

Je réitère la question : où est ton fichier cron et quel est son contenu complet ?

La variable PATH doit être renseignée dans le fichier cron, pas dans le script.

J’utilise la commande crontab -e (en root)

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
16 17 * * * sh /root/raz-iptable.sh
20 17 * * * sh /root/zs-iptable.sh

Et maintenant ça fonctionne !!

un « watch iptables -L » me montre en temps réel les règles s’activer et se désactiver

Merci a tous pour votre aide
Ph.