Posso submit un text allo STDIN di un process attivo in esecuzione in una session di schermo?

Ho un process server lungo una session di schermata sul mio server Linux. È un po 'instabile (e purtroppo non il mio software in modo da non posso risolvere il problema!), Quindi voglio scrivere un riavvio notturno del process per aiutare la stabilità. L'unico modo per farlo fare un arresto grazioso è quello di andare al process dello schermo, passare alla window in cui è in esecuzione e inserire la string "stop" sulla console di controllo.

Ci sono contorti intelligenti di reindirizzamento che posso fare per fare un cronjob submit quel command di arresto ad un orario fisso each giorno?

  • impostare il path predefinito statico in un router, in linux
  • La dimensione della cartella è maggiore di 4K su ext3
  • Qual è la buona pratica per aggiungere noti chiavi / impronte digitali a known_hosts
  • SSH non consente l'utilizzo di una chiave con autorizzazioni leggibili dal gruppo
  • ZFS su Ubuntu Server?
  • Debian e utenti
  • Come aggiornare OpenManage da 6,5 ​​a 7 in CentOS 6?
  • Linux - utilizzare "su -", ma mantenere la directory corrente
  • Come si fa a sapere quanto tempo un sistema spende in attesa di IO?
  • Come risolvere i problemi di rx_missed_errors?
  • Spostare lo spazio da un volume a altro
  • Qual è la buona conservazione effimera?
  • 3 Solutions collect form web for “Posso submit un text allo STDIN di un process attivo in esecuzione in una session di schermo?”

    Questa risposta non risolve il problema, ma è lasciata qui perché 30 persone hanno trovato utile , altrimenti l'avrei cancellato molto tempo fa.

    Scrivi a /proc/*pid of the program*/fd/0 . La sottodirectory fd contiene i descrittori di tutti i file aperti e il descrittore di file 0 è l'ingresso standard (1 è stdout e 2 è stderr).

    Esempio

    Terminale 1:

     [ciupicri@hermes ~]$ cat xxx 

    Terminale 2:

     [ciupicri@hermes ~]$ pidof cat 7417 [ciupicri@hermes ~]$ echo xxx > /proc/7417/fd/0 

    Soluzione basata sullo schermo

    Avviare il server come questo:

     # screen -d -m -S ServerFault tr az AZ # replace with your server 

    lo schermo inizierà in modalità disinserita, quindi se vuoi vedere cosa succede, esegui:

     # screen -r ServerFault 

    Controlla il server come questo:

     # screen -S ServerFault -p 0 -X stuff "stop^M" # screen -S ServerFault -p 0 -X stuff "start^M" # screen -S ServerFault -p 0 -X stuff "^D" # send EOF 

    (questa risposta si basa sull'invio di input di text a una schermata distaccata dal sito di fratello Unix e Linux )

    Spiegazione dei parametri:

     -d -m Start screen in "detached" mode. This creates a new session but doesn't attach to it. This is useful for system startup scripts. -S sessionname When creating a new session, this option can be used to specify a meaningful name for the session. -r [pid.tty.host] -r sessionowner/[pid.tty.host] resumes a detached screen session. -p number_or_name|-|=|+ Preselect a window. This is useful when you want to reattach to a specific window or you want to send a command via the "-X" option to a specific window. -X Send the specified command to a running screen session eg stuff. 

    roba [string]

      Stuff the string string in the input buffer of the current window. This is like the "paste" command but with much less overhead. Without a parameter, screen will prompt for a string to stuff. 

    soluzione basata su tmux

    Avviare il server come questo:

     # tmux new-session -d -s ServerFault 'tr az AZ' # replace with your server 

    tmux inizia in modalità disinserita , quindi se vuoi vedere cosa succede, esegui:

     # tmux attach-session -t ServerFault 

    Controlla il server come questo:

     # tmux send-keys -t ServerFault -l stop # tmux send-keys -t ServerFault Enter # tmux send-keys -t ServerFault -l start # tmux send-keys -t ServerFault Enter # tmux send-keys -t ServerFault Cd # send EOF 

    Spiegazione dei parametri:

      new-session [-AdDP] [-c start-directory] [-F format] [-n window-name] [-s session-name] [-t target-session] [-x width] [-y height] [shell-command] Create a new session with name session-name. The new session is attached to the current terminal unless -d is given. window-name and shell-command are the name of and shell command to execute in the initial window. If -d is used, -x and -y specify the size of the initial window (80 by 24 if not given). send-keys [-lR] [-t target-pane] key ... (alias: send) Send a key or keys to a window. Each argument key is the name of the key (such as `Ca' or `npage' ) to send; if the string is not receachsed as a key, it is sent as a series of characters. The -l flag disables key name lookup and sends the keys literally. 

    Prova questo per iniziare:

     # screen # cd /path/to/wd # mkfifo cmd # my_cmd <cmd CA d 

    E questo per uccidere:

     # cd /path/to/wd # echo "stop" > cmd # rm cmd 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.