-
MINT > lancer un script au démarrage
- /etc/init.d/rc.local est systématiquement appelé à chaque démarrage, ce script lance
/etc/rc.local où tu peux mettre un appel à tes programmes, y mettre ce que tu veux. Bref, pour un script local c’est la solution. - Tu veux lancer un démon, etc, dans ce cas copie /etc/init.d/skeleton /etc/init.d/nomdetondemon, tu l’édites et à l’aide de update-rc.d, tu ajustes lkes niveaux et le moment où ce script est appelé.
EN MODE GRAPHIQUE
menu principal>Tous les paramètres>système>session et démarrageEN MODE LIGNE DE COMMANDE
Sous XFCE, par la fonction graphique, ça a généré ce fichier
~/.config/autostart/plank.desktop
[Desktop Entry] Encoding=UTF-8 Version=0.9.4 Type=Application Name=plank Comment= Exec=plank OnlyShowIn=XFCE; StartupNotify=false Terminal=false Hidden=false
Pour retarder l’exécution de 5 secondes :
Exec=sh -c " sleep 5; plank "pour Unity :
mkdir -p "${HOME}/.config/autostart/" echo "[Desktop Entry] Encoding=UTF-8 Version=0.11.1 Type=Application Name=plank Comment=Run Plank at startup Exec=plank StartupNotify=false Terminal=false Hidden=false" > "${HOME}/.config/autostart/plank.desktop" chmod +x "${HOME}/.config/autostart/plank.desktop"
/etc/local.d/
exemple du dossier /etc/local.d/
ls /etc/local.d/ 01iptables.start 02serveurjeu.start
Ainsi, lorsque le service
localsera démarré, le script01iptables.starts’exécutera puis02serveurjeu.start.Activer le service local au démarrage
On vérifie avant si le service se démarre :
rc-update -v | grep local local | default nonetwork
C’est le cas chez moi en mode normal (
default) et en mode sans réseau (nonetwork)Si tel n’est pas le cas, on l’ajoute ainsi :
rc-update add local default
Les scripts
Les scripts positionnés dans /etc/local.d sont des scripts bash, tout ce qu’il y a de plus classique. Il suffit donc de les faire commencer par
#! /bin/bash
Et qu’ils soient exécutables :
chmod +x /etc/local.d/lescript.start
—
bonjour,
Je souhaiterais exécuter un script au démarrage, mais je n’y parviens pas…
J’ai essayé avec la crontab :crontab -e
@reboot sh /root/Documents/iptables.shou alors
@reboot /root/Documents/iptables.sh
J’ai aussi ajouté mon script à /etc/init.d/
Je l’ai chmod +x
J’ai ajouté le lien symbolique :ln -s /etc/init.d/iptables.sh /etc/rc.d/
j’ai ajouté le LSB au début du script
Mais le script ne se lance toujours pas…
Quelqu’un pour m’aider ?#2 17-04-2018 09:54:09
Salut
La méthode souvent employé est de mettre un fichier desktop dans le fichier autostart de ton fichier dossier .config
exemple pour le script des mises à jourcat /home/stephane/.config/autostart/updates_notifier.desktop
[Desktop Entry] Encoding=UTF-8 Version=0.9.4 Type=Application Name=Update notifier Comment=notify available updates Comment[fr]=notification des mises à jour disponibles Exec=/usr/bin/handy-update-notifier OnlyShowIn=XFCE; StartupNotify=false Terminal=false Hidden=false
merci de cette réponse.
Malheureusement ça ne fonctionne pas…
j’ai fait :nano /root/;config/autostart-scripts/iptables.desktop
dedans j’ai mis ce que tu m’as donné et j’ai remplacé cette ligne :
Exec=/root/Documents/iptables.sh
Mais ça ne fonctionne pas.
Après je précise que j’ai créé le script en tant que root, et qu’il y a des commandes iptables et que je modifie resolv.conf dedans, donc il faut être root pour l’exécuter…EDIT :
le fichier existe pourtant au chemin que j’indique :root@debian:~/Documents# ls -l
total 4
-rwxr-xr-x 1 root root 3556 Apr 17 04:10 iptables.sh
root@debian:~/Documents# pwd
/root/Documents
root@debian:~/Documents##4 17-04-2018 10:40:20
Euh… pour un pare-feu, il vaut mieux le lancer au démarrage du système.
Utiliser la crontab de l’utilisateur root, n’est certainement pas la bonne méthode. Si ça ne marche pas quand on le mets dans /etc/rc*.d/, c’est parce qu’il est très probable que le système d’init employé est systemd. Il faudrait un petit fichier unit pour systemd comme celui-ci[Unit]
Description=Setup firewall
After=network.target local-fs.target[Service]
RemainAfterExit=true
ExecStart=/root/Documents/iptables.sh[Install]
WantedBy=multi-user.targetCe fichier que l’on peut appeler iptables.service, est à mettre dans /etc/systemd/system/
Ensuite il faut activer le service :systemctl enable iptables.service
Normalement il devrait être pris en compte au prochain démarrage.
Mais évidemment, il faut que le script iptables.sh ne contiennent pas d’erreur pour que ça marche. Et pour cela vérifié que le script lancé manuellement fonctionne et produit bien le résultat attendu, en faisant :/root/Documents/iptables.sh
--
Lancer un script au démarrage de Debian
Bonjours à tous,
Tout d’abord je vous explique la situation: Depuis peu j’ai commencé à louer un VPS chez OVH (mon premier) pour diverses utilisations.
Pour tâter un peu le terrain, j’ai mis un bot Discord (JavaScript) que j’avais fait dessus pour voir si tout fonctionne bien, nickel.
Et là problème: J’ai essayé de faire un script pour le lancer au démarrage de mon VPS mais ça ne fonctionne pas !
Voici les étapes que j’ai suivies pour essayer de le faire fonctionner au démarrage:
Mon script est dans /etc/init.d
chmod a+x /etc/init.d/bot_autostart.sh
update-rc.d /etc/init.d/bot_autostart.sh defaults
Et rien ne se passe…
J’ai essayé de mettre la commande dans .bashrc (parce que j’ai pas de rc.local) pour tester mais cela s’ouvre après le démarrage de la session ce qui fait que je suis obligé d’avoir mon terminal d’ouvert pour que mon bot fonctionne…
Donc voici ma question: Comment peut-on lancer le script au démarrage de Debian avant l’ouverture de session?
Merci d’avoir de vos réponses.
salut,
les versions récentes des distributions modernes n’utilisent plus init.d
il faut regarder du côté de systemd.
« un problème clairement exposé est à moitié résolu. » -- pas de questions techniques en MP.
Si c’est du systemd, la syntaxe est la suivante :
systemctl enable MonService.service
Qui fait référence un un fichier (généralement dans
/etc/systemd/system/
). Tu va donc devoir en créer un pour ton script-
Edité par Heziode 8 décembre 2017 à 23:25:10Ensemble créons l’avenir !
J’ai testé et ça ne marche pas j’ai du raté quelque chose :/
Voici mon script (dans /usr/bin)
#!/bin/sh
start(){
su
node --harmony
/home/bot/bot
.js
}
Et voici mon service (dans /etc/systemd/system )
[Unit]
Description=Bot Autostart
[Service]
Type=oneshot
ExecStart=/usr/bin/bot_autostart.sh
[Install]
WantedBy=multi-user.target
Après j’ai bien fait
systemctl
enable
bot_autostart.service
Mais rien en se passe..
salut,
dans ton script, trois choses :
il n’est pas nécessaire de devenir root dans un script de démarrage : le démarrage se fait en tant que root
su
, tout seul, va vouloir faire passer l’utilisateur en root, et attendre que l’utilisateur entre le mot de passe de root.
mais de toute façon, ça ne sert pas ici.
et, tu l’exécutes quand ta fonction ?
« un problème clairement exposé est à moitié résolu. » -- pas de questions techniques en MP.
il faut modifier comme ci-dessous ton script.sh (le start servai à l’époque pour le init.d)
#!/bin/sh
su
node --harmony
/home/bot/bot
.js
--
Debian – Exécuter un script au démarrage de la machine
Posté dans Linux
Petit mémo pour exécuter un script au démarrage d’une machine sous Debian
Créer un script « mon_script.sh » dans un répertoire au choix.
L’en-tête doit commencer par :#!/bin/sh ### BEGIN INIT INFO # Provides: Nom du script # Required-Start: $local_fs $network # Required-Stop: $local_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Description courte # Description: Description longue ### END INIT INFO
Ajouter à la suite, les commandes à exécuter.
Rendre le script exécutable :
chmod 700 mon_script.sh
Indiquer à Debian d’exécuter le script au démarrage de la machine :
update-rc.d mon_script.sh defaults
Tester le script en relançant la machine.
Un autre solution : https://askubuntu.com/a/797600
Editer le fichier /etc/issue et ajouter la ligne à la fin :
eth0: \4{eth0}
Pour connaitre le nom de l’interface :
command ip a
Résultat :
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 52:54:00:16:1a:cc brd ff:ff:ff:ff:ff:ff inet 192.168.122.12/24 brd 192.168.122.255 scope global dynamic ens3 valid_lft 3356sec preferred_lft 3356sec inet6 fe80::5054:ff:fe16:1acc/64 scope link valid_lft forever preferred_lft forever
Le nom de la carte sera donc ens3.
Donc la ligne à ajouter sera :ens3: \4{ens3}
Testé sur Ubuntu 18.04 Server avec succès.
--
Bonjour à tous,
je cherche à exécuter un script au démarrage de ma Debian, quelle est la meilleure procédure à suivre ?
Merci
Pour un utilisateur ou pour tout le système ?
Si pour tout le systeme ça ce passe dans
/etc/init.dsinon pour un user :
soit en peaufinant le .bahsrc soit en utilisant sous gnome systeme/preferences/programmes au démarrageenfin, d’après moi
tiens un lien pour l’init.d
debian-administration.org/articles/28 6,3kEn gros, tu as plusieurs solutions
C’est tout de suite plus clair quand c’est François qui l’explique !
Bon dimanche--
--
--
- /etc/init.d/rc.local est systématiquement appelé à chaque démarrage, ce script lance