Perl can't find module when run from cron.daily

前端 未结 2 1090
梦毁少年i
梦毁少年i 2021-01-05 12:49

I have perl programs that use Net::Finger and have run successfully from cron.daily in Fedora 11.
I just upgraded a server to Fedora 18 and the

相关标签:
2条回答
  • 2021-01-05 13:10

    What happens if you add this to the top of the script?

    #!/usr/bin/perl
    use lib "/root/perl5/lib/perl5/Net";
    

    Was this previously set in the .profile?

    This is from a ubuntu thread, but may be related: https://askubuntu.com/questions/23009/reasons-why-crontab-does-not-work *Cron passes a minimal set of environment variables to your jobs. To see the difference, add a dummy job like this:

    * * * * * env > /tmp/env.output*
    

    I don't have a linux box handy at the moment, but I would try to see what's different in the @INC by running the following logged in as root and trying to set up a job to see what the crontab has. The env output above may indicate a different shell is being used by crontab, than what you may have set when logging in as root.

    log in as root and run:

    perl -le 'print for @INC'
    

    set up a cron job to see the differences. I'm not sure if this syntax will work, but you could put the command in a simple pl script.

    * * * * * perl -le 'print for @INC' > /tmp/inc.output
    

    do the same for env

    0 讨论(0)
  • 2021-01-05 13:15

    See perlfaq8.

    Here are three ways to add arbitrary directories to Perl's module search path.

    1. Set the PERL5LIB environment variable

      15 15 * * 1-5 PERL5LIB=/root/perl5/lib/perl5 /usr/local/bin/perl my_script.pl
      
    2. Use the -I command line switch

      15 15 * * 1-5 /usr/local/bin/perl -I/root/perl5/lib/perl5 my_script.pl
      
    3. Use the lib pragma inside your perl script

      #! /usr/local/bin/perl
      # my_script.pl: the script that does my thing
      use lib '/root/perl5/lib/perl5';
      use Net::Finger;
      ...
      

    Also note that the environment of a cron job is much sparser than the environment of your command line, and in particular the cron environment's $PATH variable might not be what you expect. If you're not specifying the full path to the Perl executable, verify what $PATH the cron environment is using and make sure you are running the right version of perl.

    0 讨论(0)
提交回复
热议问题