2010-06-10 8 views
7

J'ai un script qui utilise les commandes killproc et procofpid et s'exécute très bien sur une base de 64 bits. Mais quand j'ai exécuté le script sur Redhat 32bits, j'ai trouvé que les commandes ci-dessus n'existent pas.killproc et pidofproc sur linux

Je n'ai pas de machines Suse et Redhat 64 bits pour tester mon script.

Est-ce que je devine juste que sur 64 bits redhat les commandes ci-dessus devraient être disponibles? Ou les commandes ci-dessus sont-elles spécifiques à Suse et redhat?

Merci

+1

Non, mais '' kill' et pidof' sont, qui sont également portables. –

Répondre

4

Il est peu probable que les commandes soient portables. En fait c'est la première fois que j'entends parler d'eux - mais je suppose que votre problème est de travailler avec le processus par le nom, pas le pid.

Vérifiez le man pgrep ou man pkill - ils sont légèrement plus portables. Ils font partie du paquet procps (où ps et top proviennent) et devraient être disponibles sur toutes les variantes de Linux. Ils sont également disponibles sur Solaris.

0

Je pense que ces commandes sont des détails distrib: Je ne les ai jamais vu auparavant. killproc devrait être une sorte de tuer mais qu'est-ce que procofpid est censé faire?

Dans le titre vous parlez de pidofproc, vous pouvez trouver cette commande sous le pidof sur la plupart des boîtes Linux.

-1

J'ai eu le même problème que vous, il a donné l'avertissement:

pidof: des options non valides sur la ligne de commande!

J'ai changé le

"killproc -d 10 $cmd" 

à

"kill -9 \`pidof $cmd\`" 
8

killproc est dans linux redhat entreprise 5.4 dans le cadre de /etc/init.d/functions

si vous en avez besoin faites juste

. /etc/init.d/functions

dans votre script pour charger les fonctions shell, il est probablement dans d'autres versions de RedHat mais c'est le seul que je dois remettre au moment

6

Ces commandes sont defined dans le cadre du Linux Standards Base (LSB), comme indiqué par @AndreKR. Cependant, sur certains systèmes comme Redhat (et probablement SUSE), selon les packages installés, ces fonctions peuvent ne pas être définies à l'emplacement spécifié par le LSB, à savoir /lib/lsb/init-functions. Au contraire, ils sont définis au sein de /etc/init.d/functions. En outre, dans certaines versions, la variante Redhat de /etc/init.d/functions ne dispose pas de la fonction définie par LSB start_daemon.Si vous ajoutez l'extrait suivant en haut de votre script, il devrait être portable dans la plupart des distributions/installe:

if [[ -f /lib/lsb/init-functions ]]; then 
    . /lib/lsb/init-functions 
elif [[ -f /etc/init.d/functions ]]; then 
    . /etc/init.d/functions 
    # Pretend to be LSB-compliant 
    function start_daemon() { 
    daemon $* 
    } 
else 
    echo "Linux LSB init function script or Redhat /etc/init.d/functions is required for this script." 
    echo "See http://refspecs.linuxfoundation.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptfunc.html" 
    exit 1 
fi 
+0

Votre instruction 'Redhat (et probablement SUSE) ne les définit pas à l'emplacement spécifié par le LSB' est faux. Le paquet meta "lsb-core-noarch" fournit le fichier '/ lib/lsb/init-functions' entre les distributions compatibles LSB. Utilisez simplement le gestionnaire de paquets de distribution pour l'installer. – Samveen

+0

@Samveen Merci pour la clarification et les informations sur le paquet 'lsb-core-noarch'. FWIW, sur Fedora 24, c'est 'redhat-lsb-core'. L'extrait de script est toujours utile si vous n'êtes pas sûr que le package est installé ou non dans les environnements d'exécution et que vous n'avez aucune capacité ou envie de forcer son installation. – Raman

+0

Veuillez vérifier le 'provides' pour le paquet' redhat-lsb-core': Vous remarquerez qu'il 'fournit' une capacité' lsb-core-noarch' qui est un 'meta package', comme je l'ai mentionné dans mon commentaire ([rpmfind info] (https://www.rpmfind.net/linux/RPM/fedora/updates/24/x86_64/r/redhat-lsb-core-4.1-33.fc24.x86_64.html)). – Samveen