La réponse ici ( https://stackoverflow.com/a/2732991/4752883 ) fonctionne très bien si vous essayez d'exécuter un script sur une machine Linux distante à l'aide de plink
ou ssh
. Cela fonctionnera si le script a plusieurs lignes linux
.
** Cependant, si vous essayez d’exécuter un script de traitement par lots situé sur une linux/windows
machine locale et que votre machine distante l’est Windows
, elle se compose de plusieurs lignes utilisant **
plink root@MachineB -m local_script.bat
ça ne marchera pas.
Seule la première ligne du script sera exécutée. C'est probablement une limitation de plink
.
Solution 1:
Pour exécuter un script de commandes multiligne (en particulier s'il est relativement simple et composé de quelques lignes):
Si votre script de lot d'origine est comme suit
cd C:\Users\ipython_user\Desktop
python filename.py
vous pouvez combiner les lignes en utilisant le séparateur "&&" comme suit dans votre
local_script.bat
fichier comme suit
: https://stackoverflow.com/a/8055390/4752883 :
cd C:\Users\ipython_user\Desktop && python filename.py
Après cette modification, vous pouvez ensuite exécuter le script comme indiqué ici par @ JasonR.Coombs: https://stackoverflow.com/a/2732991/4752883
Solution 2:
Si votre script de traitement par lots est relativement compliqué, il peut être préférable d’utiliser un script de traitement par lots qui encapsule la commande plink ainsi que suit, comme indiqué ici par @Martin https://stackoverflow.com/a/32196999/4752883 :
rem Open tunnel in the background
start plink.exe -ssh [username]@[hostname] -L 3307:127.0.0.1:3306 -i "[SSH
key]" -N
rem Wait a second to let Plink establish the tunnel
timeout /t 1
rem Run the task using the tunnel
"C:\Program Files\R\R-3.2.1\bin\x64\R.exe" CMD BATCH qidash.R
rem Kill the tunnel
taskkill /im plink.exe