Unix/Linux Go Back    


UNIX for Advanced & Expert Users Expert-to-Expert. Learn advanced UNIX, UNIX commands, Linux, Operating Systems, System Administration, Programming, Shell, Shell Scripts, Solaris, Linux, HP-UX, AIX, OS X, BSD.

unix and linux operating commands

Different redirection behavior in BASH/Linux when run under cron vice login ???

UNIX for Advanced & Expert Users


Tags
bash, cron, linux, redirection, xfs_fsr

Closed    
 
Thread Tools Search this Thread Display Modes
    #1  
Old Unix and Linux 06-06-2011
keepitsimpleeng keepitsimpleeng is offline
Registered User
 
Join Date: Jun 2011
Last Activity: 10 June 2011, 9:42 AM EDT
Location: Central California, USA
Posts: 3
Thanks: 1
Thanked 0 Times in 0 Posts
Different redirection behavior in BASH/Linux when run under cron vice login ???

run_xfs_fsr is a xfs filesystem maintenance script designed to run under cron. The system is a home theater personal computer running mythbuntu 10.10, and is accessed remotely for these tests. cron runs a script, (xfs_fsr.sh) at 02:30 that runs the subject script under BASH and sets the parameters, 1. logfile, 2. "left-off" file, 3. runtime (10800 seconds). 4. is not set so run_xfs_fsr uses the default, /etc/mtab.

When run under cron, the xfs reorganization program (xfs_fsr) stdout goes to syslog instead of the logfile. When run as a login script, it goes to the logfile.

In the same run_xfs_fsr script, another xfs utility, xfs_db, stdout goes to the logfile in both cases.

I am at a loss to understand or see any error here. Even though I have years of programming experience, I am a newbie to BASH shell scripting……? Pardon the long post.

The section of run_xfs_fsr outputting xfs_fsr:

Code:
exec > $log_file
echo "⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯SHELL=""$SHELL"
echo "⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯PWD=""$PWD"
echo "⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯USER=""$USER"
echo "⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯SCRIPT=""$script"
echo "⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯log_file=""$log_file"
<snip> 
#start reports & reorgs
echo "⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯xfs report"
df -h -l -T --total -t xfs 2>&1   #status of local xfs file systems
frag_report $used_mtab
if [ $xfs_found == "yes" ]
then
  test $left_off_exists = "no" && echo "New $left_off will be created."
  logger -t "RUN_XFS_FSR" "xfs_fsr -v -t ""$time_for_run"" -f ""$left_off"" -m ""$used_mtab"" 2>&1 LOG:""$log_file"
  echo "⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯reorganization"
  echo -e "⋯⋯""$(date)""⋯⋯start⋯⋯xfs_fsr"
  xfs_fsr -v -t $time_for_run -f $left_off -m $used_mtab 2>&1   
  xfs_fsr_exit_status="$?" 
  echo -e "⋯⋯Exit status for xfs_fsr= ""$xfs_fsr_exit_status""\n⋯⋯""$(date)""⋯⋯-end-⋯-xfs_fsr"
  frag_report $used_mtab
else
  echo -e "⋯⋯\n⋯⋯No xfs file system mounted\n⋯⋯"
  logger -t "RUN_XFS_FSR" "No xfs file system mounted."      
fi
echo "⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯end"
logger -t "RUN_XFS_FSR" " End: ""$(date)"
exit 0

frag_report is a function that prints a summary for each mounted xfs file system using, here, /etc/mtab/

Code:
frag_report()
{ 
  echo "⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯frag_report"
  #find all xfs files system in $1 (mtab) and run frag report
  #set xfs_found="yes" if an xfs file system found
  local line; local device_file_path; local file_path; local fs_type; local oldIFS
  local mounted_devices_file;
  mounted_devices_file="${1}"
  oldIFS="$IFS"; IFS="$(printf '\n\b')"
  exec 3<&0; exec 0<"$mounted_devices_file"
  while read -r line  # traipse thru the file
  do    #cleave off 1st 3 sp delimited substr
    device_file_path="${line%% *}"; line="${line##$device_file_path}"; line="${line# }"
    file_path="${line%% *}"; line="${line##$file_path}"; line="${line# }"
    fs_type="${line%% *}" ; line="${line##$fs_type}"; line="${line# }"
    if [[ $fs_type == "xfs" ]]  #if xfs
    then   #run report std-err>std_out
      echo -e "⋯⋯xfs frag report for $file_path ($device_file_path) ⋯ $(date)"
      xfs_db -r -c frag $device_file_path 2>&1 
      xfs_found="yes"
    fi
  done
  exec 0<&3 ;  IFS="$oldIFS"
}

syslog run as login: (the shorter run time is because xfs_fsr had already reorganized the xfs files systems)

Code:
Jun  6 04:15:08 HTPC smbd[645]:   standard input is not a socket, assuming -D option
Jun  6 04:17:01 HTPC CRON[701]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Jun  6 04:25:01 HTPC CRON[778]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Jun  6 04:28:31 HTPC RUN_XFS_FSR:  Start: Mon Jun  6 04:28:30 PDT 2011  Version:1.03.001
Jun  6 04:28:31 HTPC RUN_XFS_FSR: xfs_fsr -v -t 10800 -f /root/mycron/.fsrlast_xfs -m /etc/mtab 2>&1 LOG:/var/log/xfs_fsr.log
Jun  6 04:30:26 HTPC RUN_XFS_FSR:  End: Mon Jun  6 04:30:26 PDT 2011
Jun  6 04:32:08 HTPC smbd[917]: [2011/06/06 04:32:08.729061,  0] lib/util_sock.c:1441(get_peer_addr_internal)

syslog run as cron:

Code:
Jun  6 02:30:01 HTPC CRON[32519]: (root) CMD (SHELL=/bin/bash ;/root/mycron/xfs_fsr.sh)
Jun  6 02:30:01 HTPC RUN_XFS_FSR:  Start: Mon Jun  6 02:30:01 PDT 2011  Version:1.03.001
Jun  6 02:30:03 HTPC RUN_XFS_FSR: xfs_fsr -v -t 10800 -f /root/mycron/.fsrlast_xfs -m /etc/mtab 2>&1 LOG:/var/log/xfs_fsr.log
Jun  6 02:30:03 HTPC fsr[32540]: Found 3 mounted, writable, XFS filesystems
Jun  6 02:30:03 HTPC fsr[32540]: xfs_fsr -m /etc/mtab -t 10800 -f /root/mycron/.fsrlast_xfs ...
Jun  6 02:30:03 HTPC fsr[32540]: START: pass=0 ino=0 /dev/sda3 /iso
Jun  6 02:30:03 HTPC fsr[32541]: /iso start inode=0
<snip>
Jun  6 03:39:51 HTPC fsr[32704]: ino=266 already fully defragmented.
Jun  6 03:39:51 HTPC fsr[32540]: Completed all 10 passes
Jun  6 03:39:52 HTPC RUN_XFS_FSR:  End: Mon Jun  6 03:39:52 PDT 2011
Jun  6 03:39:52 HTPC CRON[32517]: (root) MAIL (mailed 1 byte of output; but got status 0x00ff, #012)

logfile for run_xfs_fsr run under cron (unexpected, stdout from xfs_fsr missing):

Code:
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯SHELL=/bin/bash
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯PWD=/root/mycron
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯USER=
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯SCRIPT=run_xfs_fsr  v1.03.001
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯log_file=/var/log/xfs_fsr.log
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯xfs report
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda3      xfs    144G  101G   44G  70% /iso
/dev/sdb1      xfs    1.9T  1.4T  467G  75% /pvr
/dev/sdc1      xfs    1.9T  222G  1.7T  12% /pvs
total            -    3.8T  1.7T  2.1T  45%
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯frag_report
⋯⋯xfs frag report for /iso (/dev/sda3) ⋯ Mon Jun  6 02:30:02 PDT 2011
actual 6281, ideal 6206, fragmentation factor 1.19%
⋯⋯xfs frag report for /pvr (/dev/sdb1) ⋯ Mon Jun  6 02:30:02 PDT 2011
actual 973, ideal 898, fragmentation factor 7.71%
⋯⋯xfs frag report for /pvs (/dev/sdc1) ⋯ Mon Jun  6 02:30:03 PDT 2011
actual 118, ideal 105, fragmentation factor 11.02%
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯reorganization
⋯⋯Mon Jun  6 02:30:03 PDT 2011⋯⋯start⋯⋯xfs_fsr
⋯⋯Exit status for xfs_fsr= 0
⋯⋯Mon Jun  6 03:39:51 PDT 2011⋯⋯-end-⋯-xfs_fsr
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯frag_report
⋯⋯xfs frag report for /iso (/dev/sda3) ⋯ Mon Jun  6 03:39:51 PDT 2011
actual 6259, ideal 6206, fragmentation factor 0.85%
⋯⋯xfs frag report for /pvr (/dev/sdb1) ⋯ Mon Jun  6 03:39:52 PDT 2011
actual 959, ideal 899, fragmentation factor 6.26%
⋯⋯xfs frag report for /pvs (/dev/sdc1) ⋯ Mon Jun  6 03:39:52 PDT 2011
actual 111, ideal 105, fragmentation factor 5.41%
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯end

logfile for run_xfs_fsr run under login (the expected behavior):

Code:
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯SHELL=/bin/bash
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯PWD=/root/mycron
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯USER=root
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯SCRIPT=run_xfs_fsr  v1.03.001
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯log_file=/var/log/xfs_fsr.log
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯xfs report
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/sda3      xfs    144G  101G   44G  70% /iso
/dev/sdb1      xfs    1.9T  1.4T  461G  76% /pvr
/dev/sdc1      xfs    1.9T  223G  1.7T  12% /pvs
total            -    3.8T  1.7T  2.1T  45%
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯frag_report
⋯⋯xfs frag report for /iso (/dev/sda3) ⋯ Mon Jun  6 04:28:31 PDT 2011
actual 6259, ideal 6206, fragmentation factor 0.85%
⋯⋯xfs frag report for /pvr (/dev/sdb1) ⋯ Mon Jun  6 04:28:31 PDT 2011
actual 959, ideal 899, fragmentation factor 6.26%
⋯⋯xfs frag report for /pvs (/dev/sdc1) ⋯ Mon Jun  6 04:28:31 PDT 2011
actual 111, ideal 105, fragmentation factor 5.41%
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯reorganization
⋯⋯Mon Jun  6 04:28:31 PDT 2011⋯⋯start⋯⋯xfs_fsr
Found 3 mounted, writable, XFS filesystems
xfs_fsr -m /etc/mtab -t 10800 -f /root/mycron/.fsrlast_xfs ...
START: pass=0 ino=0 /dev/sda3 /iso
/iso start inode=0
<snip>
ino=266 already fully defragmented.
Completed all 10 passes
⋯⋯Exit status for xfs_fsr= 0
⋯⋯Mon Jun  6 04:30:26 PDT 2011⋯⋯-end-⋯-xfs_fsr
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯frag_report
⋯⋯xfs frag report for /iso (/dev/sda3) ⋯ Mon Jun  6 04:30:26 PDT 2011
actual 6259, ideal 6206, fragmentation factor 0.85%
⋯⋯xfs frag report for /pvr (/dev/sdb1) ⋯ Mon Jun  6 04:30:26 PDT 2011
actual 959, ideal 899, fragmentation factor 6.26%
⋯⋯xfs frag report for /pvs (/dev/sdc1) ⋯ Mon Jun  6 04:30:26 PDT 2011
actual 111, ideal 105, fragmentation factor 5.41%
⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯end

xfs_fsr.sh:

Code:
#!/bin/sh  
# Run under BASH non-interactive shell
IFS="$(printf '\n\t')"  # Remove 'space', so filenames with spaces work well
oldpwd=$PWD
SHELL=/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
cd /root/mycron
./run_xfs_fsr /var/log/xfs_fsr.log /root/mycron/.fsrlast_xfs 10800
cd $oldpwd
exit $?

Sponsored Links
    #2  
Old Unix and Linux 06-06-2011
jim mcnamara jim mcnamara is offline Forum Staff  
...@...
 
Join Date: Feb 2004
Last Activity: 11 October 2017, 6:44 PM EDT
Location: NM
Posts: 11,200
Thanks: 567
Thanked 1,102 Times in 1,018 Posts
It is almost always the result of environment variables not being declared correctly.

change the script itself to run ALL login scripts:
/etc/profile
$HOME/.profile
$HOME/.bashrc

and any other 'setup' scripts there are.
The Following User Says Thank You to jim mcnamara For This Useful Post:
keepitsimpleeng (06-06-2011)
Sponsored Links
    #3  
Old Unix and Linux 06-06-2011
keepitsimpleeng keepitsimpleeng is offline
Registered User
 
Join Date: Jun 2011
Last Activity: 10 June 2011, 9:42 AM EDT
Location: Central California, USA
Posts: 3
Thanks: 1
Thanked 0 Times in 0 Posts
Quote:
Originally Posted by jim mcnamara View Post
It is almost always the result of environment variables not being declared correctly.

change the script itself to run ALL login scripts:
/etc/profile
$HOME/.profile
$HOME/.bashrc

and any other 'setup' scripts there are.
Thanks for the suggestion, Jim

I was surprised to find that /etc/profile, $HOME/.profile, and $HOME/.bashrc are not executable.

So I ran run_xfs_fsr from cron printing environment variables.

From cron:
Code:
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
PWD=/root/mycron
LANG=en_US.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
_=/usr/bin/env

From login:
Code:
SHELL=/bin/bash
TERM=xterm
USER=root
LS_COLORS=<snip>
SUDO_USER=ljohnson
SUDO_UID=1000
USERNAME=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
MAIL=/var/mail/user
PWD=/root/mycron
LANG=en_US.UTF-8
SPEECHD_PORT=6560
SUDO_COMMAND=/bin/bash
HOME=/root
SHLVL=2
LOGNAME=root
LESSOPEN=| /usr/bin/lesspipe %s
SUDO_GID=1000
LESSCLOSE=/usr/bin/lesspipe %s %s
_=/usr/bin/env

As a sort of test, I added these environment variable to run_xfs_fsr:

Code:
TERM="xterm"
USER="root"
USERNAME="root"
MAIL="/var/mail/root"

The test failed, as xfs_fsr still output to syslog. Here is the env from this run:
Code:
TERM=xterm
SHELL=/bin/bash
USER=root
USERNAME=root
MAIL=/var/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
PWD=/root/mycron
LANG=en_US.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
_=/usr/bin/env

Then I tried adding the LESSOPEN and LESSCLOSE, with the same unhappy results:
Code:
LESSOPEN=| /usr/bin/lesspipe %s
LESSCLOSE=/usr/bin/lesspipe %s %s

Then I tried changing the xfs_xfs.sh script to:
Code:
#!/bin/sh
# Run under BASH non-interactive shell
IFS="$(printf '\n\t')"  # Remove 'space', so filenames with spaces work well
oldpwd=$PWD
SHELL=/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
USER="root"
USERNAME="root"
cd /root/mycron
bash run_xfs_fsr /var/log/xfs_fsr.log /root/mycron/.fsrlast_xfs 10800
cd $oldpwd
exit $?

hoping to properly initialize the BASH sub-shell. It produce no change in the result.

Still on my mind, however, is the question why the xfs utility xfs_db prints as expected, but the xfs reorganization program xfs_fsr does not???
    #4  
Old Unix and Linux 06-09-2011
keepitsimpleeng keepitsimpleeng is offline
Registered User
 
Join Date: Jun 2011
Last Activity: 10 June 2011, 9:42 AM EDT
Location: Central California, USA
Posts: 3
Thanks: 1
Thanked 0 Times in 0 Posts
Still having problems. The last attempt at making it work was:
Code:
xfs_fsr -v -t $time_for_run -f $left_off -m $used_mtab >$log_file 2>&1

where ">$log_file" was added to the xfs_fsr execute line.

The result was $log_file has binary data of some sort apparently inserted by this command.

Last edited by keepitsimpleeng; 06-09-2011 at 12:12 PM..
Sponsored Links
Closed


Linux More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Behavior of Bad Script in Cron Job Sivaswami Shell Programming and Scripting 3 10-11-2009 10:29 PM
BASH quoting behavior na5m Shell Programming and Scripting 5 12-30-2008 01:31 PM
Very Strange Behavior for redirection cahook Shell Programming and Scripting 5 08-08-2007 11:32 AM
Mimic bash history behavior sysera Shell Programming and Scripting 0 10-13-2005 04:48 PM



All times are GMT -4. The time now is 07:59 PM.