Ah-ha!!!! Found it:  I had to modify the script, and turn the z4=`ansible 
... 2>&1 | ...` into:

/usr/local/bin/ansible mainmachine -m shell -a "psql ...." | grep '^ [0-9]' 
> /tmp/z4a
z4=`cat /tmp/z4a`

So, much to my surprise and dismay, the application of 2>&1 to ansible 
inside backticks is highly caustic. And, it didn't really matter that I 
didn't use the 2>&1, as no stderr messages were generated anyway. I am not 
proficient enough in ansible, nor in the finer points of bash, to render 
any judgment or condemnation here.  So, if anyone else has the same 
problem, maybe 2 every 10 years, try to remove any filepointer redirections!

Thanks to Will McDonald, for his experiments and help! I really appreciate 
it!

On Thursday, August 31, 2023 at 7:18:10 PM UTC-6 [email protected] wrote:

> See below for inline answers:
>
> On Thursday, August 31, 2023 at 1:47:47 PM UTC-6 Will McDonald wrote:
>
> OK, that's some useful extra info. I've just had a very quick basic play 
> (I haven't touched cron in earnest for a long time). 
>
> Have you tried echo-ing $z4 and appended to a tmp file to see if there's 
> anything in it at run time? 
>
>
> Yes, I have, and $z4 is indeed quite empty. 
>
>
> I've tried a few variations in a standard user's crontab:
>
> root@DESKTOP-9HGJE25:~# crontab -u wmcdonald -l | grep -v ^#
> * * * * * ansible -m setup localhost
> * * * * * ~/ansible-test
>
> root@DESKTOP-9HGJE25:~# cat /home/wmcdonald/ansible-test
> #!/bin/sh
>
> ansible -m setup localhost
>
> BASIC_VAR=`ansible -m setup localhost`
> echo $BASIC_VAR
>
> VERBOSE_VAR=`ansible -vvv -m ping localhost`
> echo $VERBOSE_VAR
>
> FILE_OUTPUT=`ansible -m ping localhost`
> echo $FILE_OUTPUT >> /tmp/ansible.out
>
> The output from the last set of steps shows:
>
> root@DESKTOP-9HGJE25:~# cat /tmp/ansible.out
> localhost | SUCCESS => { "changed": false, "ping": "pong" }
> localhost | SUCCESS => { "changed": false, "ping": "pong" }
>
> I did notice from syslog that without an MTA, cron (on Ubuntu, at least) 
> is throwing away output:
>
> /var/log/syslog:Aug 31 20:09:02 DESKTOP-9HGJE25 CRON[2361]: (CRON) info 
> (No MTA installed, discarding output)
>
>
> Not on this system. It seems clear that the ansible runs, the output is 
> logged, but not sent to the "terminal" because, well,
> I don't know, but evidently, there's no "terminal" with cron originating 
> the execution of the shell, perhaps? Any options to ansible for this? Any 
> options in crontab?
>  
>
>
>
> On Thu, 31 Aug 2023 at 18:57, [email protected] <[email protected]> 
> wrote:
>
> See below.
>
> On Thursday, August 31, 2023 at 8:59:57 AM UTC-6 Will McDonald wrote:
>
> This isn't really an Ansible problem per se unless it's *only* ansible in 
> a subshell that doesn't run from cron? Have you tested basic cron 
> functionality using something simple like this (or something even more 
> basic):
>
> #!/bin/sh
> z4=`date +%Y%m%d%H%M`
> touch /tmp/${z4}
>
> And then check to see if that file is created every 30 minutes *does* 
> work? 
>
>
> Yes, it does. I know the script is running, because it is much elaborate 
> than this, creating files, logging, etc.
> It's run is annotated in /var/log/cron. If there was an obvious error, 
> like no execute permission, I'd see something in a CMDOUT () message.
> No errors.
> I look at the /var/log/ansible.log, and I see the output I'd like to have, 
> in the ansible.log. They are just not being returned
> to the script. It's as if it's a "term" sort of problem. So, in the 
> ansible.log, I see something like:
>
> 2023-08-29 17:38:18,067 p=84629 u=root n=ansible | mainmachine | CHANGED | 
> rc=0 >>
>  10.10.11.0##255.255.255.0
>  101.133.145.94##255.255.255.255
>     .
>     .
>     .
> and mayhaps a hundred or so more entries.
>  
>
>
> First questions that spring to mind are:
>
> - is there anything in the cron log, syslog or journal for the crond 
> service?
>
> yes. /var/log/cron records it run.  ansible.log shows that ansible is 
> called and generates the desired data. It's not being echoed to the stdout 
> of the ansible process, it appears.
>
> - is anything else running successfully out of /etc/cron.d / cron.daily 
> etc? 
>
> Yep. All else seems well with the cron.d stuff. 
>  
>
> - is crond enabled in whatever init system you're using? (You haven't 
> stated which distro?)
>
> I'm running this cron on a AlmaLinux release 8.8 (Sapphire Caracal) OS.
>  
>
>
>
>
> On Thu, 31 Aug 2023 at 15:24, Steve Murphy <[email protected]> wrote:
>
> As the subject line says, I can't get this script to run correctly from 
> cron.
>
>   My cron entry (in a file in /etc/cron.d):
>
> ======================================
>
> # Run the 30-minly job
>
> SHELL=/bin/bash
>
> PATH=/sbin:/bin/:/usr/sbin:/usr/bin:/root
>
> MAILTO=ROOT
>
> */30 * * * * root /root/getlist
>
> ======================================
>
>
> /root/getlist   perms a+r, a+x, u+w:
>
> =====================================
>
> #!/bin/bash
>
> z4=`ansible mainmachine -m shell -a "psql -t -Upiquah -c 
> \"subnet.ipaddress || '##' || subnet.netmask from subnet  order by 
> subnet.ipaddress asc;\"" 2>&1  | grep '^ [0-9]'`
>
> echo $z4
>
> =====================================
>
> from which, if you run this "by hand", you'll get some output that looks 
> like this:
>
> 19.20.21.22##255.255.255.255 23.24.25.26##255.255.255.255 
> 130.140.150.160##255.255.255.254
>
> ... and so forth.
>
> BUT, if executed from cron, $z4 will be empty.
>
>
> What do I need to do to in the cron.d file to make this work well?
>
>
>
> -- 
>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Ansible Project" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
>
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/ansible-project/33ab4c47-f91e-4587-a5f2-08341ecf4fa5n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/ansible-project/33ab4c47-f91e-4587-a5f2-08341ecf4fa5n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/0308d708-65fb-4e17-b670-e249027f530fn%40googlegroups.com.

Reply via email to