How can I execute `date` inside of a cron tab job?

Multi tool use
Multi tool use

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
86
down vote

favorite
22












I want to create a log file for a cron script that has the current hour in the log file name. This is the command I tried to use:



0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


Unfortunately I get this message when that runs:



/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file


I have tried escaping the date part in various ways, but without much luck. Is it possible to make this happen in-line in a crontab file or do I need to create a shell script to do this?







share|improve this question


























    up vote
    86
    down vote

    favorite
    22












    I want to create a log file for a cron script that has the current hour in the log file name. This is the command I tried to use:



    0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


    Unfortunately I get this message when that runs:



    /bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
    /bin/sh: -c: line 1: syntax error: unexpected end of file


    I have tried escaping the date part in various ways, but without much luck. Is it possible to make this happen in-line in a crontab file or do I need to create a shell script to do this?







    share|improve this question
























      up vote
      86
      down vote

      favorite
      22









      up vote
      86
      down vote

      favorite
      22






      22





      I want to create a log file for a cron script that has the current hour in the log file name. This is the command I tried to use:



      0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


      Unfortunately I get this message when that runs:



      /bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
      /bin/sh: -c: line 1: syntax error: unexpected end of file


      I have tried escaping the date part in various ways, but without much luck. Is it possible to make this happen in-line in a crontab file or do I need to create a shell script to do this?







      share|improve this question














      I want to create a log file for a cron script that has the current hour in the log file name. This is the command I tried to use:



      0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


      Unfortunately I get this message when that runs:



      /bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
      /bin/sh: -c: line 1: syntax error: unexpected end of file


      I have tried escaping the date part in various ways, but without much luck. Is it possible to make this happen in-line in a crontab file or do I need to create a shell script to do this?









      share|improve this question













      share|improve this question




      share|improve this question








      edited Jan 20 '12 at 23:00









      Gilles

      506k12010031529




      506k12010031529










      asked Jan 20 '12 at 17:12









      cwd

      12.7k52114153




      12.7k52114153




















          4 Answers
          4






          active

          oldest

          votes

















          up vote
          134
          down vote



          accepted










          Short answer:



          Try this:



          0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


          Note the backslash escaping the % sign.



          Long answer:



          The error message suggests that the shell which executes your command doesn't see the second back tick character:




          /bin/sh: -c: line 0: unexpected EOF while looking for matching ``'




          This is also confirmed by the second error message your received when you tried one of the other answers:




          /bin/sh: -c: line 0: unexpected EOF while looking for matching `)'




          The crontab manpage confirms that the command is read only up to the first unescaped % sign:




          The "sixth" field (the rest of the line) specifies the command to
          be run. The entire command portion of the line, up to a newline or
          % character, will be executed by /bin/sh or by the shell specified in
          the SHELL variable of the cronfile. Percent-signs (%) in the
          command, unless escaped with backslash (), will be changed into
          newline charac- ters, and all data after the first % will be sent to
          the command as standard input.







          share|improve this answer






















          • awesome - thanks so much! +1
            – cwd
            Jan 20 '12 at 19:58










          • Sorry for my ignorance, but where do you see this error messages? When I do 'grep CRON /var/log/syslog' I see no error messages, although cron failed - kagda.ru/i/9a016249a39_20-05-2015-09:22:47_9a01.png
            – Tebe
            May 20 '15 at 6:24










          • @Копать_Шо_я_нашел cron will send an email with the error message,
            – Jasen
            Jan 1 '16 at 6:50






          • 1




            date +%Y %m %d %H:%M:%S-cronlog
            – DevilCode
            Apr 4 '16 at 13:36

















          up vote
          6
          down vote













          You can also put your commands into a shell file and then execute the shell file with cron.



          jobs.sh



          echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


          cron



          0 * * * * sh jobs.sh





          share|improve this answer



























            up vote
            5
            down vote













            If you would like to make the date formatting string as a variable (to avoid duplicating the whole string), DO NOT escape % and DO NOT put it in $()



            For example, while declare the string, just write:



            DATEVAR=date +%Y%m%d_%H%M%S


            Then, write cron statement with $($VARIABLE_NAME) like this:



            * * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log


            Thanks to cyberx86, her/his answer at ServerFault might be more completed:






            share|improve this answer





























              up vote
              1
              down vote













              In cron, you can use this simple syntax:



              */15 01-09 * * * sh /script.sh >> /home/username/cron_$(date -d"-0 days" +%Y%m%d).log 2>&1





              share|improve this answer






















              • Output date format will retrun like cron_20180123.log
                – bala4rtraining
                Jan 24 at 13:51










              Your Answer







              StackExchange.ready(function()
              var channelOptions =
              tags: "".split(" "),
              id: "106"
              ;
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function()
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled)
              StackExchange.using("snippets", function()
              createEditor();
              );

              else
              createEditor();

              );

              function createEditor()
              StackExchange.prepareEditor(
              heartbeatType: 'answer',
              convertImagesToLinks: false,
              noModals: false,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: null,
              bindNavPrevention: true,
              postfix: "",
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              );



              );








               

              draft saved


              draft discarded


















              StackExchange.ready(
              function ()
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f29578%2fhow-can-i-execute-date-inside-of-a-cron-tab-job%23new-answer', 'question_page');

              );

              Post as a guest






























              4 Answers
              4






              active

              oldest

              votes








              4 Answers
              4






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes








              up vote
              134
              down vote



              accepted










              Short answer:



              Try this:



              0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


              Note the backslash escaping the % sign.



              Long answer:



              The error message suggests that the shell which executes your command doesn't see the second back tick character:




              /bin/sh: -c: line 0: unexpected EOF while looking for matching ``'




              This is also confirmed by the second error message your received when you tried one of the other answers:




              /bin/sh: -c: line 0: unexpected EOF while looking for matching `)'




              The crontab manpage confirms that the command is read only up to the first unescaped % sign:




              The "sixth" field (the rest of the line) specifies the command to
              be run. The entire command portion of the line, up to a newline or
              % character, will be executed by /bin/sh or by the shell specified in
              the SHELL variable of the cronfile. Percent-signs (%) in the
              command, unless escaped with backslash (), will be changed into
              newline charac- ters, and all data after the first % will be sent to
              the command as standard input.







              share|improve this answer






















              • awesome - thanks so much! +1
                – cwd
                Jan 20 '12 at 19:58










              • Sorry for my ignorance, but where do you see this error messages? When I do 'grep CRON /var/log/syslog' I see no error messages, although cron failed - kagda.ru/i/9a016249a39_20-05-2015-09:22:47_9a01.png
                – Tebe
                May 20 '15 at 6:24










              • @Копать_Шо_я_нашел cron will send an email with the error message,
                – Jasen
                Jan 1 '16 at 6:50






              • 1




                date +%Y %m %d %H:%M:%S-cronlog
                – DevilCode
                Apr 4 '16 at 13:36














              up vote
              134
              down vote



              accepted










              Short answer:



              Try this:



              0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


              Note the backslash escaping the % sign.



              Long answer:



              The error message suggests that the shell which executes your command doesn't see the second back tick character:




              /bin/sh: -c: line 0: unexpected EOF while looking for matching ``'




              This is also confirmed by the second error message your received when you tried one of the other answers:




              /bin/sh: -c: line 0: unexpected EOF while looking for matching `)'




              The crontab manpage confirms that the command is read only up to the first unescaped % sign:




              The "sixth" field (the rest of the line) specifies the command to
              be run. The entire command portion of the line, up to a newline or
              % character, will be executed by /bin/sh or by the shell specified in
              the SHELL variable of the cronfile. Percent-signs (%) in the
              command, unless escaped with backslash (), will be changed into
              newline charac- ters, and all data after the first % will be sent to
              the command as standard input.







              share|improve this answer






















              • awesome - thanks so much! +1
                – cwd
                Jan 20 '12 at 19:58










              • Sorry for my ignorance, but where do you see this error messages? When I do 'grep CRON /var/log/syslog' I see no error messages, although cron failed - kagda.ru/i/9a016249a39_20-05-2015-09:22:47_9a01.png
                – Tebe
                May 20 '15 at 6:24










              • @Копать_Шо_я_нашел cron will send an email with the error message,
                – Jasen
                Jan 1 '16 at 6:50






              • 1




                date +%Y %m %d %H:%M:%S-cronlog
                – DevilCode
                Apr 4 '16 at 13:36












              up vote
              134
              down vote



              accepted







              up vote
              134
              down vote



              accepted






              Short answer:



              Try this:



              0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


              Note the backslash escaping the % sign.



              Long answer:



              The error message suggests that the shell which executes your command doesn't see the second back tick character:




              /bin/sh: -c: line 0: unexpected EOF while looking for matching ``'




              This is also confirmed by the second error message your received when you tried one of the other answers:




              /bin/sh: -c: line 0: unexpected EOF while looking for matching `)'




              The crontab manpage confirms that the command is read only up to the first unescaped % sign:




              The "sixth" field (the rest of the line) specifies the command to
              be run. The entire command portion of the line, up to a newline or
              % character, will be executed by /bin/sh or by the shell specified in
              the SHELL variable of the cronfile. Percent-signs (%) in the
              command, unless escaped with backslash (), will be changed into
              newline charac- ters, and all data after the first % will be sent to
              the command as standard input.







              share|improve this answer














              Short answer:



              Try this:



              0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


              Note the backslash escaping the % sign.



              Long answer:



              The error message suggests that the shell which executes your command doesn't see the second back tick character:




              /bin/sh: -c: line 0: unexpected EOF while looking for matching ``'




              This is also confirmed by the second error message your received when you tried one of the other answers:




              /bin/sh: -c: line 0: unexpected EOF while looking for matching `)'




              The crontab manpage confirms that the command is read only up to the first unescaped % sign:




              The "sixth" field (the rest of the line) specifies the command to
              be run. The entire command portion of the line, up to a newline or
              % character, will be executed by /bin/sh or by the shell specified in
              the SHELL variable of the cronfile. Percent-signs (%) in the
              command, unless escaped with backslash (), will be changed into
              newline charac- ters, and all data after the first % will be sent to
              the command as standard input.








              share|improve this answer














              share|improve this answer



              share|improve this answer








              edited Jan 20 '12 at 17:44

























              answered Jan 20 '12 at 17:31









              Adam Zalcman

              2,49611413




              2,49611413











              • awesome - thanks so much! +1
                – cwd
                Jan 20 '12 at 19:58










              • Sorry for my ignorance, but where do you see this error messages? When I do 'grep CRON /var/log/syslog' I see no error messages, although cron failed - kagda.ru/i/9a016249a39_20-05-2015-09:22:47_9a01.png
                – Tebe
                May 20 '15 at 6:24










              • @Копать_Шо_я_нашел cron will send an email with the error message,
                – Jasen
                Jan 1 '16 at 6:50






              • 1




                date +%Y %m %d %H:%M:%S-cronlog
                – DevilCode
                Apr 4 '16 at 13:36
















              • awesome - thanks so much! +1
                – cwd
                Jan 20 '12 at 19:58










              • Sorry for my ignorance, but where do you see this error messages? When I do 'grep CRON /var/log/syslog' I see no error messages, although cron failed - kagda.ru/i/9a016249a39_20-05-2015-09:22:47_9a01.png
                – Tebe
                May 20 '15 at 6:24










              • @Копать_Шо_я_нашел cron will send an email with the error message,
                – Jasen
                Jan 1 '16 at 6:50






              • 1




                date +%Y %m %d %H:%M:%S-cronlog
                – DevilCode
                Apr 4 '16 at 13:36















              awesome - thanks so much! +1
              – cwd
              Jan 20 '12 at 19:58




              awesome - thanks so much! +1
              – cwd
              Jan 20 '12 at 19:58












              Sorry for my ignorance, but where do you see this error messages? When I do 'grep CRON /var/log/syslog' I see no error messages, although cron failed - kagda.ru/i/9a016249a39_20-05-2015-09:22:47_9a01.png
              – Tebe
              May 20 '15 at 6:24




              Sorry for my ignorance, but where do you see this error messages? When I do 'grep CRON /var/log/syslog' I see no error messages, although cron failed - kagda.ru/i/9a016249a39_20-05-2015-09:22:47_9a01.png
              – Tebe
              May 20 '15 at 6:24












              @Копать_Шо_я_нашел cron will send an email with the error message,
              – Jasen
              Jan 1 '16 at 6:50




              @Копать_Шо_я_нашел cron will send an email with the error message,
              – Jasen
              Jan 1 '16 at 6:50




              1




              1




              date +%Y %m %d %H:%M:%S-cronlog
              – DevilCode
              Apr 4 '16 at 13:36




              date +%Y %m %d %H:%M:%S-cronlog
              – DevilCode
              Apr 4 '16 at 13:36












              up vote
              6
              down vote













              You can also put your commands into a shell file and then execute the shell file with cron.



              jobs.sh



              echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


              cron



              0 * * * * sh jobs.sh





              share|improve this answer
























                up vote
                6
                down vote













                You can also put your commands into a shell file and then execute the shell file with cron.



                jobs.sh



                echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


                cron



                0 * * * * sh jobs.sh





                share|improve this answer






















                  up vote
                  6
                  down vote










                  up vote
                  6
                  down vote









                  You can also put your commands into a shell file and then execute the shell file with cron.



                  jobs.sh



                  echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


                  cron



                  0 * * * * sh jobs.sh





                  share|improve this answer












                  You can also put your commands into a shell file and then execute the shell file with cron.



                  jobs.sh



                  echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log


                  cron



                  0 * * * * sh jobs.sh






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Jul 3 '15 at 14:41









                  Trevi Awater

                  16315




                  16315




















                      up vote
                      5
                      down vote













                      If you would like to make the date formatting string as a variable (to avoid duplicating the whole string), DO NOT escape % and DO NOT put it in $()



                      For example, while declare the string, just write:



                      DATEVAR=date +%Y%m%d_%H%M%S


                      Then, write cron statement with $($VARIABLE_NAME) like this:



                      * * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log


                      Thanks to cyberx86, her/his answer at ServerFault might be more completed:






                      share|improve this answer


























                        up vote
                        5
                        down vote













                        If you would like to make the date formatting string as a variable (to avoid duplicating the whole string), DO NOT escape % and DO NOT put it in $()



                        For example, while declare the string, just write:



                        DATEVAR=date +%Y%m%d_%H%M%S


                        Then, write cron statement with $($VARIABLE_NAME) like this:



                        * * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log


                        Thanks to cyberx86, her/his answer at ServerFault might be more completed:






                        share|improve this answer
























                          up vote
                          5
                          down vote










                          up vote
                          5
                          down vote









                          If you would like to make the date formatting string as a variable (to avoid duplicating the whole string), DO NOT escape % and DO NOT put it in $()



                          For example, while declare the string, just write:



                          DATEVAR=date +%Y%m%d_%H%M%S


                          Then, write cron statement with $($VARIABLE_NAME) like this:



                          * * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log


                          Thanks to cyberx86, her/his answer at ServerFault might be more completed:






                          share|improve this answer














                          If you would like to make the date formatting string as a variable (to avoid duplicating the whole string), DO NOT escape % and DO NOT put it in $()



                          For example, while declare the string, just write:



                          DATEVAR=date +%Y%m%d_%H%M%S


                          Then, write cron statement with $($VARIABLE_NAME) like this:



                          * * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log


                          Thanks to cyberx86, her/his answer at ServerFault might be more completed:







                          share|improve this answer














                          share|improve this answer



                          share|improve this answer








                          edited Aug 10 '17 at 10:24









                          Stéphane Chazelas

                          282k53518851




                          282k53518851










                          answered Jan 4 '16 at 8:41









                          Gawi - Kai

                          5114




                          5114




















                              up vote
                              1
                              down vote













                              In cron, you can use this simple syntax:



                              */15 01-09 * * * sh /script.sh >> /home/username/cron_$(date -d"-0 days" +%Y%m%d).log 2>&1





                              share|improve this answer






















                              • Output date format will retrun like cron_20180123.log
                                – bala4rtraining
                                Jan 24 at 13:51














                              up vote
                              1
                              down vote













                              In cron, you can use this simple syntax:



                              */15 01-09 * * * sh /script.sh >> /home/username/cron_$(date -d"-0 days" +%Y%m%d).log 2>&1





                              share|improve this answer






















                              • Output date format will retrun like cron_20180123.log
                                – bala4rtraining
                                Jan 24 at 13:51












                              up vote
                              1
                              down vote










                              up vote
                              1
                              down vote









                              In cron, you can use this simple syntax:



                              */15 01-09 * * * sh /script.sh >> /home/username/cron_$(date -d"-0 days" +%Y%m%d).log 2>&1





                              share|improve this answer














                              In cron, you can use this simple syntax:



                              */15 01-09 * * * sh /script.sh >> /home/username/cron_$(date -d"-0 days" +%Y%m%d).log 2>&1






                              share|improve this answer














                              share|improve this answer



                              share|improve this answer








                              edited Jan 24 at 14:41









                              Kevin Lemaire

                              1,037421




                              1,037421










                              answered Jan 24 at 13:50









                              bala4rtraining

                              112




                              112











                              • Output date format will retrun like cron_20180123.log
                                – bala4rtraining
                                Jan 24 at 13:51
















                              • Output date format will retrun like cron_20180123.log
                                – bala4rtraining
                                Jan 24 at 13:51















                              Output date format will retrun like cron_20180123.log
                              – bala4rtraining
                              Jan 24 at 13:51




                              Output date format will retrun like cron_20180123.log
                              – bala4rtraining
                              Jan 24 at 13:51












                               

                              draft saved


                              draft discarded


























                               


                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function ()
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f29578%2fhow-can-i-execute-date-inside-of-a-cron-tab-job%23new-answer', 'question_page');

                              );

                              Post as a guest













































































                              Z 6R,ca D4xKjqMOKzzJqv5X7o fiys3cAlrh0,nRV vhZChXi,246Sn6,t
                              FZ6EQwfCSVJZtFB41,nq CK,qyJ84M9SvogQx5u3wrDWHxCP w9m,VUwXi7XauxXzKJO DFR5aVed

                              Popular posts from this blog

                              How to check contact read email or not when send email to Individual?

                              How many registers does an x86_64 CPU actually have?

                              Displaying single band from multi-band raster using QGIS