Ankündigung

Einklappen
Keine Ankündigung bisher.

Shellscript über Cronjobs ausführen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Shellscript über Cronjobs ausführen

    Guten Morgen in die Runde.

    Ich habe nach der Anleitung https://www.df.eu/de/support/df-faq/...-faq/cronjobs/eine Datei cron.sh auf dem Serverpfad der Webseite im Root-Verzeichnis abgelegt und mit folgendem Inhalt gefüttert:
    Code:
    #!/bin/sh
    echo "Running App Command"
    env -i /usr/local/bin/php7-72STABLE-CLI -q /pfad/zum/webspace/bin/console app:create-user
    Leider wird das Skript nicht ausgeführt.

    Der Code für app:create-user lautet wiefoglt:
    PHP-Code:
    <?php
    /**
     * This file is part of the Symfony package.
     *
     * (c) Fabien Potencier <[email protected]>
     *
     * For the full copyright and license information, please view the LICENSE
     * file that was distributed with this source code.
     *
     * App\Commands\CreateUserCommand.php
     */

    namespace App\Commands;


    use 
    Symfony\Component\Console\Command\Command;
    use 
    Symfony\Component\Console\Input\InputArgument;
    use 
    Symfony\Component\Console\Input\InputInterface;
    use 
    Symfony\Component\Console\Output\OutputInterface;

    class 
    CreateUserCommand extends Command
    {
        
    // the name of the command (the part after "bin/console")
        
    protected static $defaultName 'app:create-user';

        public function 
    __construct(bool $requirePassword false)
        {
            
    // best practices recommend to call the parent constructor first and
            // then set your own properties. That wouldn't work in this case
            // because configure() needs the properties set in this constructor
            
    $this->requirePassword $requirePassword;

            
    parent::__construct();
        }

        protected function 
    configure()
        {
            
    $this
                
    // the short description shown while running "php bin/console list"
                
    ->setDescription('Creates a new user.')

                
    // the full command description shown when running the command with
                // the "--help" option
                
    ->setHelp('This command allows you to create a user...')

                ->
    addArgument('password',$this->requirePassword InputArgument::REQUIRED InputArgument::OPTIONAL'User password')

                ;
        }

        protected function 
    execute(InputInterface $inputOutputInterface $output)
        {
            
    // outputs multiple lines to the console (adding "\n" at the end of each line)
            
    $output->writeln([
                
    'User Creator',
                
    '============',
                
    '',
            ]);

            
    // the value returned by someMethod() can be an iterator (https://secure.php.net/iterator)
            // that generates and returns the messages with the 'yield' PHP keyword
            //$output->writeln($this->someMethod());

            // outputs a message followed by a "\n"
            
    $output->writeln('Whoa!');

            
    // outputs a message without adding a "\n" at the end of the line
            
    $output->write('You are about to ');
            
    $output->write('create a user.');
            
    file_put_contents('cron.log','Test');
            @
    mail('[email protected]',__METHOD__,'cron.sh');
        }
    }
    Es kommt weder eine E-Mail an noch wird die cron.log geschrieben auch wird in der Ausgabe im Kundenmenü bei DomainFactory nichts angegeben. Ich hätte wenigstens aus der ShellScript Datei den
    Code:
    echo
    Befehl erwartet.

    Offensichtlich mach ich bei dem Aufruf im Cronjob was falsh bzw. in den Einstellungen im Kundenmenü:
    Klicken Sie bitte auf die Grafik für eine vergrößerte Ansicht  Name: cron.JPG Ansichten: 1 Größe: 36,1 KB ID: 289
    Zuletzt geändert von ronny.kruebel; 28.06.2019, 07:53. Grund: Erweiterung der Stichworte

    #2
    Du musst den komplette Verzeichnispfad angeben.
    der beginnt bei dF mit
    /kunden/xxx_yyy/webseiten/....

    Dann sollte es klappen.
    MfG,
    masterframe

    Kommentar


      #3
      Danke für den Hinweis. Ich habe vielleicht vergessen zu erwähnen das das "Ziel" von mir ausgeweisst wurde. Da oben steht bereits der von dir genannte Pfad drin. Denn sobald ich dies jetzt eintrage, medlet er mir einen Fehler ,dass das Skript nicht verfügbar ist.

      Kommentar


        #4
        Ich habe zu Testzwecken jetzt mal den Code in der Datei cron.sh geändert zu:
        Code:
        #!/bin/sh
        msg1="one"
        msg2="$msg1 two"
        msg3="$msg2 three"
        echo $msg3
        Im Kundencenter von domainFactory ist jedoch keine Ausgabe zu sehen außer:

        Klicken Sie bitte auf die Grafik für eine vergrößerte Ansicht

Name: cron_2.JPG
Ansichten: 300
Größe: 18,9 KB
ID: 299

        Es ist zum Verzweifeln. Es wäre so unfassbar hilfreich, wenn man die Commands von Symfony 4 dementsprechend ansteuern könnte.
        Angehängte Dateien

        Kommentar


          #5
          Moin,
          das Shellscript muss auch ausführbar sein.
          Code:
          chmod +x cron.sh
          MfG

          Kommentar


            #6
            Zitat von Nico Beitrag anzeigen
            Moin,
            das Shellscript muss auch ausführbar sein.
            Code:
            chmod +x cron.sh
            MfG
            Vielen Dank für den Hinweis. Ich habe nebenbei auch einen ONE!Done Auftrag ausgelöst, da es wirklich dringend für mein derzeitiges Projekt auf Arbeit ist und auch hier leider noch keine Lösung. Ich werde auf jeden Fall den Lösungsweg aufzeigen, sobald ich Erfolg habe.

            Kommentar


              #7
              Klicken Sie bitte auf die Grafik für eine vergrößerte Ansicht  Name: line_seperator.PNG Ansichten: 1 Größe: 45,0 KB ID: 319

              Ich konnte nach mehr als 3 Stunden mit dem domainFactory Support das "Übel" herausfinden und möchte gern die Lösung präsentieren:

              Ich nutze PHPStorm und es hatte sich ein Windows Umbruchzeichen in der Datei cron.sh verirrt, was dort so nicht rein durfte. Soll heißen:
              Man kann über Settings => Code-Style => Line-Seperator das Verhalten für Umbruche in Dateien steuern und somit dem Problem entgegenwirken.

              Entgegen der Anleitung unter FAQ be idomainactory sollte ich in den Script Dateien mit !#/bin/bash starten und nicht wie angegeben mit !#/bin/sh. Anbei also nun der korrekte Code für eine Shell Script Datei, welche man direkt aufrufen möchte und welche man für Symfony 4 Projekte mit Commands verwenden will:
              cron.sh
              Code:
              #!/bin/bash
              env -i /usr/local/bin/php7-72STABLE-STANDARD -f /kunden/xxxxx_xxxxx/webseiten/website_folder/bin/console app:create-user
              Die PHP Version solltet Ihr dann entsprechend Eures Projektes anpassen. In meinem Anwendungsfall war es eben geschriebene Version.

              Im Verzeichnis src erstellt man dann einfach einen Unterordner Commands und in diesem dann die gewünschte Datei MyCommand.php
              PHP-Code:
              <?php
              /**
               * This file is part of the Symfony package.
               *
               * (c) Fabien Potencier <[email protected]>
               *
               * For the full copyright and license information, please view the LICENSE
               * file that was distributed with this source code.
               *
               * App\Commands\CreateUserCommand.php
               */

              namespace App\Commands;


              use 
              Symfony\Component\Console\Command\Command;
              use 
              Symfony\Component\Console\Input\InputArgument;
              use 
              Symfony\Component\Console\Input\InputInterface;
              use 
              Symfony\Component\Console\Output\OutputInterface;

              class 
              CreateUserCommand extends Command
              {
                  
              // the name of the command (the part after "bin/console")
                  
              protected static $defaultName 'app:create-user';

                  public function 
              __construct(bool $requirePassword null)
                  {
                      
              // best practices recommend to call the parent constructor first and
                      // then set your own properties. That wouldn't work in this case
                      // because configure() needs the properties set in this constructor
                      
              $this->requirePassword $requirePassword;

                      
              parent::__construct();
                  }

                  protected function 
              configure()
                  {
                      
              $this
                          
              // the short description shown while running "php bin/console list"
                          
              ->setDescription('Creates a new user.')

                          
              // the full command description shown when running the command with
                          // the "--help" option
                          
              ->setHelp('This command allows you to create a user...')

                          ->
              addArgument('password',$this->requirePassword InputArgument::REQUIRED InputArgument::OPTIONAL'User password')

                          ;
                  }

                  protected function 
              execute(InputInterface $inputOutputInterface $output)
                  {
                      
              // outputs multiple lines to the console (adding "\n" at the end of each line)
                      
              $output->writeln([
                          
              'User Creator',
                          
              '============',
                          
              '',
                      ]);

                      
              // the value returned by someMethod() can be an iterator (https://secure.php.net/iterator)
                      // that generates and returns the messages with the 'yield' PHP keyword
                      //$output->writeln($this->someMethod());

                      // outputs a message followed by a "\n"
                      
              $output->writeln('Whoa!');

                      
              // outputs a message without adding a "\n" at the end of the line
                      
              $output->write('You are about to ');
                      
              $output->write('create a user.');
                  }
              }
              Wenn alles nach "Plan" läuft dann erhält man auch im Kundencenter die Ausgabe aus der Funktion execute

              Ein großer Dank gilt hier dem Support und im direkten der Spätschicht für den unermütlichen EInsatz. Natürlich danke ich auch der Community hier im Forum, denn ohne Euch wäre ich sicher bei der ein oder anderen Sache ebenfalls hängen geblieben.
              Zuletzt geändert von ronny.kruebel; 28.06.2019, 22:15. Grund: Schreibfehler entfernt

              Kommentar


                #8
                Hallo ronny.kruebel,

                es freut uns, dass eine Lösung gefunden wurde. Noch mehr freut uns, dass Sie das hier so ausführlich dokumentieren

                Mit freundlichen Grüßen

                Nils Dornblut
                Blog - Facebook - Twitter
                Communitybetreiber: domainfactory GmbH
                Impressum / Pflichtangaben

                Kommentar


                  #9
                  Zitat von Nils Dornblut Beitrag anzeigen
                  ...Noch mehr freut uns, dass Sie das hier so ausführlich dokumentieren...Nils Dornblut
                  Vielen Dank auch für das Lob. Nun es ist üblich in einem quelloffenen System entsprechend Support zurückzugeben. Schliesslich ist man über jeden Fundus im Netz sicher, welcher einem eins vor allem ersaprt: Zeit.

                  Kommentar


                    #10
                    "sicher" = "froh"?

                    Gruß
                    Jan
                    Two hours of trial and error can save ten minutes of manual reading.

                    Kommentar


                      #11
                      Genau . Sicher froh

                      Kommentar

                      Lädt...
                      X