我是shell脚本的新手.我编写了一个shell脚本来对MySQL数据库进行增量备份.脚本采用可执行格式,手动执行时运行成功,但通过crontab执行时失败.
Crontab条目是这样的:
*/1 * * * * /home/db-backup/mysqlbackup.sh
Run Code Online (Sandbox Code Playgroud)
下面是shell脚本代码 -
#!/bin/sh
MyUSER="root" # USERNAME
MyPASS="password" # PASSWORD
MyHOST="localhost" # Hostname
Password="" #Linux Password
MYSQL="$(which mysql)"
if [ -z "$MYSQL" ]; then
echo "Error: MYSQL not found"
exit 1
fi
MYSQLADMIN="$(which mysqladmin)"
if [ -z "$MYSQLADMIN" ]; then
echo "Error: MYSQLADMIN not found"
exit 1
fi
CHOWN="$(which chown)"
if [ -z "$CHOWN" ]; then
echo "Error: CHOWN not found"
exit 1
fi
CHMOD="$(which chmod)"
if [ -z "$CHMOD" ]; then
echo …Run Code Online (Sandbox Code Playgroud) 假设,如果一个表有一个名为test的列,并且我在内部测试中写了一行"Dear $ name,Hello",其中$ name是一个变量.我需要选择我正在做的这一行
my $test = $dbh->prepare( "select test from testing")
Run Code Online (Sandbox Code Playgroud)
在脚本中我已经分配了$ name ="Joe".现在,我需要将$ name变量替换为脚本中指定的变量名称(即Joe).我试过打印$ test.它打印"亲爱的名字,你好"我怎么能这样做.
我编写了一个perl脚本,在其中调用子例程将字段插入数据库表.子例程在另一个文件Test.pm中调用,而不是主perl文件Test.pl. 在Test.pm中,我有以下字段要插入表中
my $date = localtime->strftime('%Y-%m-%d %H:%M:%S');
my $time = localtime->strftime('%H:%M:%S');
Run Code Online (Sandbox Code Playgroud)
但是,在这里我得到以下错误
Can't locate object method "strftime" via package
Run Code Online (Sandbox Code Playgroud)
这是什么错误,为什么会发生这种错误.如果我传递$date和$time来自的参数Test.pl,脚本工作正常,我该如何解决?
以下是子程序:
sub send_message
{
my $date = localtime->strftime('%Y-%m-%d %H:%M:%S');
my $time = localtime->strftime('%H:%M:%S');
print "Date : $date Time : $time";
my $sql1 = "Insert into testtable(time,date) values('$time','$date')";
my $sth1 = $dbh->prepare($sql1);
$sth1->execute
or die "SQL Error: $DBI::errstr\n";
return;
}
Run Code Online (Sandbox Code Playgroud) 我编写了一个perl脚本,在某些情况下我必须将空字符串复制到文件中.
例如,$str是一个包含MySQL表中行数的变量.
假设表中没有行,则将空字符串复制到变量中$str.存储的值$str需要复制到另一个文件.我怎样才能做到这一点?当我试图复制时,我得到了这个警告:
Use of uninitialized value $str in string at test.pl line 23
Run Code Online (Sandbox Code Playgroud) 我编写了一个perl脚本test.pl,它使用了另一个文件测试.pm编写的子程序.我能够手动成功运行此脚本,但是当我在crontab上运行相同的脚本时,我收到以下错误:
我已将这两个文件的权限更改为执行权限并在脚本顶部使用.如何在crontab上成功运行脚本.
Can't locate testing.pm in @INC"use testing"
Crontab : */2 * * * * PERL5LIB=$PERL5LIB:/home/test/testing.pm /home/test/test.pl > /home/test/test.log 2>&1
**
test.pl
#!/usr/bin/perl -w
use DBI;
use warnings;
use Time::Piece;
use HTML::Entities;
use lib '/home/test';
use testing
# Connecting to the database #
my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost;mysql_socket=/var/run/mysqld/mysqld.sock","root","password", {'RaiseError' => 1});
# my $dob = '2009-04-21 00:00:00';
my $dob = '2009-04-22 00:00:00';
#my $dob = localtime->strftime('%Y-%m-%d %H:%M:%S');
print "\ndob : $dob\n";
$name="test";
$number=1;
$email="test@test.com"
$id="123";
if ($mail==0)
{
send_msg(0,$name,$number,$email,$aid);
} …Run Code Online (Sandbox Code Playgroud)