I present with a rough looking perl script that has found new and maybe interesting ways to fail. It has worked previously. It can very well be that this is a version that wasn't supposed to go forward but did. What has changed in the meantime is everything, and I'd like to see if we can cook up something better, but let me start with moderately-abridged output and source in readmore tags. Then I'll pop out some lines and ask questions.

$ ./1.test.1.pl title is 1.test. path1 is /home/hogan/5.scripts/1.test. abs is /home/hogan/5.scripts/1.test./1.test.1.pl ini path is /home/hogan/Documents/html_template_data/6.values.ini $VAR1 = bless( { 'my_sftp' => { 'key_path' => '/home/hogan/.ssh/id_rsa +', 'domain' => '164.90.158.33', 'username' => 'fred', 'port' => '22' }, } }, 'Config::Tiny' ); values are 164.90.158.33 fred 22 OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017 debug1: Reading configuration data /etc/ssh/ssh_config ... debug1: Authentication succeeded (publickey). Authenticated to 164.90.158.33 ([164.90.158.33]:22). debug1: channel 0: new [client-session] ... debug1: Sending subsystem: sftp object created, back with caller word is 1.test. dir2 is /var/www/html/perlmonks 1.test.1.html 1.test.3.html 1.test.2.html 1.test.1.css files are 1.test.1.html 1.test.3.html 1.test.2.html 1.test.1.css old num is 3 Make rus captions(y/n)?: y matching are b.txt rus_munge is /home/hogan/5.scripts/1.test./template_stuff/translations +/trans.15-10-2020-22-01-35.txt rus_path is /home/hogan/5.scripts/1.test./template_stuff/ruscaptions/b +.txt Get other translations(y/n)?: n remote_dir is 1.test.4 result is <!DOCTYPE html> <head> <meta charset="utf-8"> <link rel="stylesheet" type="text/css" href="/css/1.test.1.css"/> <title>1.test.</title> </head> <body> <div class="wrapper"> <div class = origin> <h3>Portland, Thu Oct 15 22:01:39 2020</h3> </div> <h1>Screenshots for DigitalOcean</h1> dir is /home/hogan/5.scripts/1.test./template_stuff/captions dir is /home/hogan/5.scripts/1.test./template_stuff/ruscaptions tmpl is /home/hogan/5.scripts/1.test./template_stuff/code2.tmpl Put file to server(y/n)?: y $VAR1 = { 'place' => 'Portland', 'script_file' => '/home/hogan/5.scripts/1.test./1.test.1.pl' +, 'refc' => [ [ 'Screenshot from 2020-10-04 11-20-42.png', '<div class="outer"> <p class="hft-paras">Building new site with perl template.</p> </div> <!-- end #outer--> ', '<div class="outer"> <p class="hft-paras">Neue Site mit Perl-Vorlage erstellen.</p> </div> <!-- end #outer--> ' ] ], , 'html_file' => '1.test.4.html', 'headline' => undef, 'chapter' => 'for DigitalOcean', 'print_module' => 0, 'print_script' => '1', 'ts' => 'template_system', 'remote_dir' => '1.test.4', 'css_file' => '1.test.1.css', 'image_dir' => '/var/www/html/pmimage', 'title' => '1.test.', 'server_dir' => '/var/www/html/perlmonks', 'book' => 'Screenshots', 'oibottom' => bless( [ '/home/hogan/5.scripts/1.test./templa +te_stuff/oibottom.txt', '/home/hogan/5.scripts/1.test./templa +te_stuff/oibottom.txt' ], 'Path::Tiny' ) }; server dir is /var/www/html/perlmonks execution was here return1 is Directory /var/www/html/perlmonks already exists! setcwd2 failed path3 is /home/hogan/5.scripts/1.test./template_stuff/1.test.1.css image dir is /var/www/html/pmimage parameter array is /var/www/html/pmimage Net::SFTP::Foreign=HASH(0x55e +cba31fb60) Couldn't create remote directory: Permission denied Bounce wireless(y/n)?: alarm set for ten in process 22679 and pinging +google PING www.google.com (216.58.217.36) 56(84) bytes of data. 64 bytes from den03s10-in-f36.1e100.net (216.58.217.36): icmp_seq=1 tt +l=117 time=15.5 ms ... 64 bytes from den03s10-in-f36.1e100.net (216.58.217.36): icmp_seq=14 t +tl=117 time=11.7 ms ^C --- www.google.com ping statistics --- 14 packets transmitted, 14 received, 0% packet loss, time 13015ms rtt min/avg/max/mdev = 11.779/15.660/23.484/3.148 ms debug1: channel 0: free: client-session, nchannels 1 debug1: fd 0 clearing O_NONBLOCK debug1: fd 1 clearing O_NONBLOCK Killed by signal 2. $

The script has been useful in the past for exotic connection problems, but I'm afraid there's significant glitches. The first caller looks like this:

# upload images my $image_dir = $vars{"image_dir"}; say "image dir is $image_dir"; my $return2 = createDir( $image_dir, $sftp ); say "return2 is $return2";

That's not too scary. But then we go find createDir

sub createDir { use 5.011; use Net::SFTP::Foreign; my ( $dirName, $sftp ) = @_; if ( $sftp->test_e($dirName) ) { if ( !$sftp->test_d($dirName) ) { print "Remove file(y/n)?: "; my $prompt1 = <STDIN>; chomp $prompt1; if ( $prompt1 eq ( "y" | "Y" ) ) { if ( fork() == 0 ) { # arm the alarm clock alarm(35); say "you got 35 seconds for process $$"; # create a child process my $return3 = $sftp->remove($dirName); say "return3 is $return3"; createDir($dirName, $sftp); say "process $$ executed here"; exit(0); } } #end if that tests !$sftp->test_d($dirName) next brace } if ( $sftp->test_d($dirName) ) { say "execution was here"; return "Directory $dirName already exists!"; } else { say "Can't create $dirName because there's a file in the way!"; handleDirCreateError( @_, $sftp->error ); } } my $success = $sftp->mkdir($dirName) or handleDirCreateError( @_, $sftp->error ); return $success; }

Then it's down a rabbit hole with handleDirCreateError

sub handleDirCreateError { use 5.011; use Net::SFTP::Foreign; my ( $dirName, $sftp, $error ) = @_; say "parameter array is @_"; if ( fork() == 0 ) { # arm the alarm clock alarm(10); say "alarm set for ten in process $$ and pinging google"; # create a child process my $trial = system("ping www.google.com"); say "trial is $trial"; exit(0); } print "Bounce wireless(y/n)?: "; my $prompt1 = <STDIN>; chomp $prompt1; if ( $prompt1 eq ( "y" | "Y" ) ) { if ( fork() == 0 ) { # arm the alarm clock alarm(35); say "alarm set for 35 in process $$ and restarting network"; # create a child process my $trial2 = system("sudo service network-manager restart"); say "trial2 is $trial2"; sleep 30; say "sleeping 30"; exit(0); } } print "Do you think you're ready now(y/n)?: "; my $prompt2 = <STDIN>; chomp $prompt2; if ( $prompt2 eq ( "y" | "Y" ) ) { my $return2 = createDir( $dirName, $sftp ); say "return2 is $return2"; } else { say "$error was too much this time: ceasing execution"; die; } return "execution shouldn't get here"; }
parameter array is /var/www/html/pmimage Net::SFTP::Foreign=HASH(0x55ecba31fb60) Couldn't create remote directory: Permission denied

Q1) Is there a perl remedy for this? I seem to be able to upload files but not create directories.

Q2) If the answer to Q1 is no, then, [OT] Is there a unix remedy?

if ( fork() == 0 ) { # arm the alarm clock alarm(10); say "alarm set for ten in process $$ and pinging google"; # create a child process my $trial = system("ping www.google.com"); say "trial is $trial"; exit(0); }

The system call never relinquishes control. Q3) Is it said to be blocking?

Q4) What do these indicate when I hit control-C?

debug1: fd 0 clearing O_NONBLOCK debug1: fd 1 clearing O_NONBLOCK

Thanks for your comment,


In reply to modernizing a perl util to upload a file through sftp by Aldebaran

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.