[CentOS] Cannot execute /usr/bin/fetchmail

Sun Mar 25 15:32:42 UTC 2007
William L. Maltby <CentOS4Bill at triad.rr.com>

On Sun, 2007-03-25 at 18:48 +0800, Matt Arnilo S. Baluyos (Mailing
Lists) wrote:
> Hello everyone,
> 
> I'm setting up a fetchmail command to run every five minutes so I can
> get email from another POP3 account. The fetchmail package was
> installed via yum.
> 
> I can execute the command manually on the command line. But I'm having
> trouble when it's run from cron.
> 
> I have noticed that commands run via cron and execute via /bin/sh, so
> I tried to run the fetchmail command manually. This is what I get:
> 
> [root at scalix ~]# /bin/sh /usr/bin/fetchmail
> /usr/bin/fetchmail: /usr/bin/fetchmail: cannot execute binary file
> 
> What could be the problem here? Anyone else having problems with fetchmail?
> 

Going from memory, so I hope this is not too erroneous.

As you may have deduced from the other replies, you don't *need*
"/bin/bash" at the start of the command line when executing a typical
binary.

Even for cron entries.

The linker/loader has some logic to automatically handle various binary
formats. In fact, AFAIR, the convention of the first line in a shell
script having something like "#!/bin/bash" was to allow this same
"automatic" loading to occur. I've never followed up to see if any OS
implementation actually handles it correctly. I presume that a program
would call the loader and pass the file name to get it to work, if it
does indeed work.

Further, I believe that normal shell scripts don't need the leading
"/bin/sh" (or similar) either. As another respondent pointed out, the
default is to execute via "/bin/sh -c ...." or similar. For binaries,
this does interject a small amount of additional overhead. It is not
significant.

One point of significance: the environmental variables that exist at
command line do/may not be set/correct when crontab invokes a process.
For this reason, some binaries may need a "wrapper" script that is
called by cron. It may be as simple as #!/bin/bash --login... some more
stuff" or even just contain "." (or "source", if you prefer) command to
read the appropriate .bashrc or .bash_profile to inject needed variables
into the environment.

HTH
--
Bill