linux crontab下的指令碼不執行怎麼辦
在工作中經常會遇到一些狀況,比如寫好的 shell 指令碼手工執行很正常,但一旦把其配置在 crontab 上排程就會出現這樣或那樣的問題。本人就遇到到如下幾種情況。
1 、在呼叫 oracle 的 sqlplus 、 sqlldr 等命令工具時必須寫出其全路徑才能在 crontab 中執行成功,否則,雖然手動執行很正常,但一配到 crontab 上就出現異常。
2 、手動執行 shell 指令碼時,可以用 sh 命令;但在 cron 中一定不能用 sh 執行命令,而要用直接的列出 shell 指令碼檔案的方式順序執行。
3 、在 crontab 呼叫時,如果有用到資料庫,最好把資料庫的相關環境變數等列寫出來。
4 、要在 crontab 裡排程, shell 指令碼中引用到的檔案最好都寫絕對路徑。
5、如果是ORACLE資料庫的指令碼,一定要注意環境變數,例如
PATH=$PATH:$HOME/bin
export PATH
export TMP=/tmp
export TMPDIR=/tmp
export ORACLE_BASE=/oracle/app
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_SID=racdb1
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
6、 檢查crond程式是否正常
/etc/init.d/crond status (貌似centos7版本沒有這個命令)
/etc/init.d/crond start
service rsyslog status
ps -elf|grep crond
centos7
service crond status
service crond start
service crond status
7、如何判斷crontab是否執行,可以看這個日誌 /var/log/cron (貌似centos7版本沒有這個命令)
8、如果是root使用者下執行,環境變數可以設定加上這兩行
. /etc/profile
. ~/.bash_profile
手動執行指令碼成功,crontab不執行,可以新增以下
if [ -f ~/.bash_profile ];
then
. ~/.bash_profile
fi
9、如果是grails程式的啟動
nohup grails prod run-app -Dserver.port=xxxx --non-interactive 2>&1 > nohup.out &
為了這個指令碼能成功執行,新增了N多的環境變數,
這裡關於 grails就新增了java相關的環境變數。
#!/bin/bash
#設定環境變數
#root使用者環境變數
. /etc/profile
. ~/.bash_profile
#java環境變數
JAVA_HOME=/home/app/jdk1.7.0_71
JAVA_OPTS="-Xmx1024m -XX:MaxPermSize=512M"
GRAILS_HOME=/home/app/grails-2.3.11
MAVEN_HOME=/home/app/apache-maven-3.0.5
export JAVA_HOME JAVA_OPTS GRAILS_HOME MAVEN_HOME
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin:$GRAILS_HOME/bin:$MAVEN_HOME/bin
export PATH
#查詢9898的程式ID
process_id1=$(echo $(ps -ef | grep server.port=9898 | grep -v grep | awk '{print $2}'))
process_id2=`ps -ef | grep rule-service-api1 | grep -v grep |grep -v '/home/app/rule-service-api1/restart_9898.sh'| awk '{print $2}'`
count=$(echo $(ps -ef | grep server.port=9898 | grep -v grep | awk '{print $2}'|wc -l))
#判斷程式是否存在,重啟該程式
if [ $count -eq 0 ];
then
cd /home/app/rule-service-api1/
sh /home/app/rule-service-api1/startup-rule.sh > /opt/restart9898_1.log 2>&1
sleep 10
echo 'start successful' >> /opt/restart9898_1.log
date >> /opt/restart9898_1.log
else
kill -9 $process_id1 $process_id2
sleep 10
cd /home/app/rule-service-api1/
sh /home/app/rule-service-api1/startup-rule.sh > /opt/restart9898_1.log 2>&1
sleep 10
echo 'kill and restart successful' >> /opt/restart9898_1.log
date >> /opt/restart9898_1.log
fi
遇到/etc/rc.local這個開機自啟動,但是在裡面寫命令確不執行怎麼辦
注意:
ll /etc/rc.local
[root@test ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Oct 23 2014 /etc/rc.local -> rc.d/rc.local
發現這是一個連結檔案
[root@test ~]# ll /etc/rc.d/rc.local
-rw-r--r-- 1 root root 696 Oct 8 11:16 /etc/rc.d/rc.local
在檢視發現許可權是644,並沒有執行許可權,原因就在這裡了
賦予許可權即可
chmod 755 /etc/rc.d/rc.local
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28371090/viewspace-2654131/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- crontab執行shell指令碼指令碼
- crontab不執行mysql的指令碼問題的解決!MySql指令碼
- 通過Linux crontab 定期執行Oracle Procedure 指令碼LinuxOracle指令碼
- UNIX crontab自動執行指令碼指令碼
- crontab不執行
- aText for mac不執行怎麼辦Mac
- 如何使用Linux的Crontab定時執行PHP指令碼的方法LinuxPHP指令碼
- 在linux上定期執行命令、指令碼(cron,crontab,anacron)Linux指令碼
- linux下crontab 不能執行的原因Linux
- 指令碼在crontab裡沒有執行的解決辦法之一指令碼
- 使用CRONTAB呼叫shell指令碼執行EXP指令碼
- linux環境下,java程式手工執行不亂碼,crontab自動執行就亂碼,解決方案!LinuxJava
- crontab無法執行perl指令碼 手工卻成功執行指令碼
- Linux計劃任務crontab執行指令碼不正確的問題Linux指令碼
- Linux下如何執行Shell指令碼Linux指令碼
- Crontab自動執行指令碼Kill掉MySQL的僵死程式指令碼MySql
- Ubuentu crontab執行scala不執行問題
- Linux下用crontab定時執行PHP程式LinuxPHP
- Win10使用Powershell提示禁止執行指令碼怎麼辦 Win10使用Powershell提示禁止執行指令碼如何解決Win10指令碼
- Crontab 任務不執行問題
- linux下rman增量備份指令碼以及指令碼自動執行Linux指令碼
- Linux下MySql密碼忘了怎麼辦?LinuxMySql密碼
- crontab異常:shell下可以執行命令,執行crontab卻報錯
- linux crontab以秒為單元執行指令碼_轉自骨骨筆記Linux指令碼筆記
- Linux crontab 未執行排查Linux
- Linux crontab 沒有執行Linux
- shell指令碼放到crontab裡就執行不成功的問題指令碼
- Linux資料夾執行許可權不夠怎麼辦?如何處理?Linux
- Linux下的crontab定時執行任務命令詳解Linux
- Linux管理指令碼之自動執行指令碼Linux指令碼
- 分析表的crontab指令碼指令碼
- 伺服器部署python指令碼並使用crontab定時執行伺服器Python指令碼
- 想在指令碼里面執行su命令,怎麼才能實現?指令碼
- php不設定指令碼執行時間的方法PHP指令碼
- centOS crontab定時任務不執行的解決CentOS
- python中怎樣執行指令碼Python指令碼
- shell 命令在終端可以執行成功,為什麼放在 groovy 指令碼中不執行?指令碼
- Linux 定時執行指令碼、命令Linux指令碼