Comment puis-je prendre la sortie standard d'un processus qui est DÉJÀ en cours d'exécution
J'ai l'exécution d'un tâche cron qui va se passer pendant un certain temps et j'aimerais afficher sa sortie standard (stdout). Je ne sais pas comment important le fait que le processus a été lancé par cron est, mais je me dis que je voudrais mentionner. C'est sur OSX, donc, je n'ai pas accès à des choses comme... /proc/[pid]/..., ou en treillis, ou strace. Les Suggestions de l'exécution avec IO redirection (par exemple script > output & tail -f output
) ne sont PAS acceptables, parce que ce processus est 1) déjà en cours d'exécution, et 2) ne peut pas être arrêté/redémarré avec la redirection. Si il existe des solutions qui fonctionnent sur différents systèmes Unix, ce serait l'idéal, mais plus précisément je suis en train de faire ça sur un Mac maintenant.
OriginalL'auteur theraccoonbear | 2010-08-06
Vous devez vous connecter pour publier un commentaire.
Vraie solution pour OSX
Écrire la fonction suivante à votre
~/.bashrc
ou~/.zshrc
.Utilisation:
https://github.com/mivok/squirrelpouch/wiki/dtrace
REMARQUE:
Vous devez désactiver
dtrace
restriction sur El Capitan ou plus tard.ajoutée à
~/.profile
et cela a fonctionné tout de suite!cette capture stdout et stderr ou tout simplement stdout?
Sur MacOS Sierra (10.12.6 ), j'obtiens cette erreur:
csrutil: requesting an unsupported configuration. This is likely to break in the future and leave your machine in an unknown state. csrutil: failed to modify system integrity configuration. This tool needs to be executed from the Recovery OS.
Bonne prise. Nous avons besoin de résoudre ce problème de compatibilité.
OriginalL'auteur mpyw
AVERTISSEMENT: Aucune idée de si Mac a cette. Cette technique existe sur Linux. YMMV.
Vous pouvez récupérer la sortie standard stdout/err /proc (en supposant que les privilèges adéquats):
Ou prenez tout en restant dans la mémoire tampon dans un fichier:
PS: fd/1 est sortie standard (stdout), fd/2 est stderr.
EDIT: Alex brown> Mac n'a pas de ce, mais c'est une astuce utile pour Linux.
i@cking vous aime.
tail -f /proc/$PID/fd/1
imprime rien pour moi... sur LInuxOriginalL'auteur Mark Renouf
utilisation
dtruss -p <PID>
, ou mêmerwsnoop -p <PID>
.OriginalL'auteur Alex Brown
neercs a la capacité de "saisir" les programmes qui ont commencé à l'extérieur. Peut-être qu'il va travailler pour vous.
BTW, vous n'avez pas de poutre ou de strace, mais vous n'avez pas de dtrace.
OriginalL'auteur LaC
Je pense que le fait que vous avez commencé avec cron, vous pourriez économiser. Sous linux, toute sortie standard d'une tâche cron est envoyé par la poste à la unix compte de messagerie de l'utilisateur qui est propriétaire de la tâche. Pas sûr au sujet de OSX. Malheureusement, vous devrez attendre pour le travail à terminer avant le mail est envoyé et vous pouvez voir la sortie.
OriginalL'auteur Sodved