Hi everybody,<br><br>I hope i&#39;m in the right place. I&#39;m trying to automate an operation we usually do manually with some RS232(serial port)/ethernet MOXA switches.<br>This operation reboots a linux debian device by sending a &quot;magic-sysrq+b&quot; command to the kernel if this device does not respond through SSH.<br>
To do that manually, we do :<br># this is the connection to the RS/232-ethernet port, this switch is connected with the linux device through a serial port<br># and connected to my LAN with an ethernet cable. The switch serial port 1 is bound to tcp port 100.<br>
alex@jazz:~$ telnet 10.1.1.1 100<br>Trying 10.1.1.1 ...<br>Connected to 10.1.1.1.<br>Escape character is &#39;^]&#39;.<br># here, i can press &quot;enter&quot; to access to the linux prompt <br># or i can enter &quot;ctrl+]&quot; to access the telnet prompt<br>
# here, i enter &quot;ctrl + ]&quot; and get the switch prompt<br>telnet&gt;<br># now i enter &quot;send brk&quot; then &quot;enter&quot;, this is the same thing than the linux &quot;magic sysrq&quot;<br>telnet&gt; send brk<br>
# now i press &quot;b&quot; (without enter), then the device directly &quot;hard reboot&quot; with a short message like &quot;resetting system&quot;<br><br>So, i want to do this with pexpect, here is my script : <br>-------------------------------<br>
import pexpect                                                                 <br>import sys                                                                                  <br>import time                                                                                 <br>
import os                                                                                   <br>                                                                                            <br>switch_ip_address = sys.argv[1]<br>
switch_port = sys.argv[2]   <br>sysrq_key = sys.argv[3]                                                                     <br><br>print(&#39;ip address is: &#39; + switch_ip_address)                                                <br>
print(&#39;switch port number is: &#39; + switch_port)                                              <br>print(&#39;sysrq key is: &#39; + sysrq_key)                                                         <br><br>telnet_child = pexpect.spawn(&#39;telnet &#39; + switch_ip_address + &#39; &#39; + switch_port)             <br>
telnet_child.expect(&#39;Escape.*&#39;)<br>telnet_child.sendcontrol(&#39;]&#39;)<br>telnet_child.expect(&#39;telnet&gt; &#39;)<br>telnet_child.sendline(&#39;send brk&#39;)<br>#time.sleep(0.5)<br>telnet_child.send(sysrq_key)<br>
-------------------------------<br>It looks like it is working almost fine, when i run my script with : <br>python send_brk.py 10.1.1.1 100 b<br>the script end without errors.<br>Then i connect to the switch to check if the device has rebooted but it has not :<br>
-------------------------------<br>athaveau@athaveau:~$ telnet 10.1.1.1 100<br>Trying 10.1.1.1...<br>Connected to 10.1.1.1.<br>Escape character is &#39;^]&#39;.<br>-------------------------------<br>Then when i press enter, i get that : <br>
-------------------------------<br>SysRq : HELP : loglevel0-8 reBoot tErm Full kIll show-backtrace-all-active-cpus(L) showMem Nice showPc Sync showTasks Unmount showLocks <br>-------------------------------<br>this is the magic sysrq helper, so it looks like the last thing i sent: the &quot;b&quot; (sysrq_key variable) letter is not sent to the<br>
telnet command but i can&#39;t understand why.<br>I know this is a long and certainly a little bit boring :-) but if someone has an idea ... it would very pleasant !<br><br>Thanks by advance.<br><br><br>