Aperçu
systemd-run exécute une commande sous le contrôle de systemd, faisant fonctionner cette commande comme une unité systemd indépendante. Cela permet d'exploiter les fonctionnalités puissantes de systemd telles que la gestion des groupes de processus, la limitation des ressources et l'intégration de la journalisation.
Caractéristiques principales
- Création d'unités de portée ou de service temporaires
- Limitation des ressources et définition de la priorité du programme
- Exécution en arrière-plan même après la fermeture de la session shell (unité de service)
- Journalisation intégrée via le journal systemd
- Exécution de commandes dans des conteneurs et des machines virtuelles
Options principales
systemd-run offre diverses options pour contrôler l'environnement du programme à exécuter et les attributs de l'unité systemd.
Type et nom de l'unité
Contrôle de l'exécution et environnement
Commande générée :
Essayez de combiner les commandes.
Description:
`systemd-run` Exécute la commande.
Essayez d'exécuter virtuellement les commandes avec l'IA en combinant les options ci-dessus.
Exemples d'utilisation
Divers exemples d'utilisation de la commande systemd-run.
Exécuter une commande avec une unité de portée de base
systemd-run --scope echo "Hello from systemd-run"
Exécute une commande simple en tant qu'unité de portée temporaire. Cette commande s'exécute jusqu'à ce que systemd-run se termine.
Exécuter une commande avec une unité de service en arrière-plan
systemd-run --service --unit=my-long-task.service sleep 300
Crée un service en arrière-plan qui continue de s'exécuter même après la fermeture de la session shell. Le nom du service est spécifié avec --unit.
Définir la priorité du CPU et la limite de mémoire
systemd-run --nice=10 --property=MemoryLimit=500M stress --cpu 4
Définit la priorité du CPU du programme à exécuter à un niveau inférieur (nice=10) et limite l'utilisation de la mémoire à 500 Mo.
Exécuter une commande dans un répertoire de travail spécifique
systemd-run --working-directory=/tmp bash -c 'pwd; touch testfile.txt'
Configure la commande pour qu'elle s'exécute dans le répertoire /tmp.
Exécuter une commande en pipeline via un shell
systemd-run --shell echo "Hello" | cat
Pour utiliser des fonctionnalités du shell telles que les pipelines (|) ou les redirections (>), vous devez utiliser l'option --shell.
Exécuter une commande avec une unité utilisateur
systemd-run --user --scope echo "User-specific task"
Crée et exécute l'unité dans l'instance systemd de l'utilisateur actuel. Cela n'affecte pas l'ensemble du système.
Conseils et précautions
Conseils utiles et points à considérer lors de l'utilisation de systemd-run.
Unité de portée vs Unité de service
Une unité de portée (--scope) n'est valide que pendant l'exécution de la commande systemd-run et dépend du processus parent. Une unité de service (--service) s'exécute indépendamment en arrière-plan même après la fin de la commande systemd-run. L'utilisation de --service est courante pour les tâches en arrière-plan.
- `--scope` : Dépend du processus parent, se termine avec systemd-run
- `--service` : Exécution indépendante en arrière-plan, persiste après la fin de systemd-run
Vérification et gestion de l'état de l'unité
L'état des unités créées avec systemd-run peut être vérifié à l'aide de la commande systemctl. Les unités de service peuvent être arrêtées avec systemctl stop, etc.
- Vérifier l'état : `systemctl status <unit_name>`
- Arrêter le service : `systemctl stop <unit_name>`
- Vérifier les journaux : `journalctl -u <unit_name>`
Utilisation de la limitation des ressources
Vous pouvez limiter diverses ressources telles que le CPU, la mémoire et les E/S en utilisant l'option --property. Ceci est très efficace pour améliorer la stabilité du système et empêcher certains processus d'utiliser des ressources excessives.
--shell pour utiliser les fonctionnalités du shell
Si votre commande inclut des fonctionnalités spéciales du shell telles que des pipelines (|), des redirections (>) ou une exécution en arrière-plan (&), vous devez impérativement utiliser l'option --shell pour que la commande soit interprétée par le shell. Sinon, la commande pourrait ne pas s'exécuter correctement.