Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Acme.Sh
Commits
77f96b38
Commit
77f96b38
authored
Mar 13, 2019
by
neilpang
Browse files
support Windows scheduler. fix
https://github.com/Neilpang/acme.sh/issues/2145
parent
b10929fe
Changes
1
Hide whitespace changes
Inline
Side-by-side
acme.sh
View file @
77f96b38
...
...
@@ -9,6 +9,9 @@ PROJECT_ENTRY="acme.sh"
PROJECT
=
"https://github.com/Neilpang/
$PROJECT_NAME
"
DEFAULT_INSTALL_HOME
=
"
$HOME
/.
$PROJECT_NAME
"
_WINDOWS_SCHEDULER_NAME
=
"
$PROJECT_NAME
.cron"
_SCRIPT_
=
"
$0
"
_SUB_FOLDERS
=
"dnsapi deploy"
...
...
@@ -4923,35 +4926,108 @@ _installcert() {
}
__read_password
()
{
unset
_pp
prompt
=
"Enter Password:"
while
IFS
=
read
-p
"
$prompt
"
-r
-s
-n
1 char
do
if
[
"
$char
"
=
$'
\0
'
]
;
then
break
fi
prompt
=
'*'
_pp
=
"
$_pp$char
"
done
echo
"
$_pp
"
}
_install_win_taskscheduler
()
{
_lesh
=
"
$1
"
_centry
=
"
$2
"
_randomminute
=
"
$3
"
if
!
_exists cygpath
;
then
_err
"cygpath not found"
return
1
fi
if
!
_exists schtasks
;
then
_err
"schtasks.exe is not found, are you on Windows?"
return
1
fi
_winbash
=
"
$(
cygpath
-w
$(
which bash
))
"
_debug _winbash
"
$_winbash
"
if
[
-z
"
$_winbash
"
]
;
then
_err
"can not find bash path"
return
1
fi
_myname
=
"
$(
whoami
)
"
_debug
"_myname"
"
$_myname
"
if
[
-z
"
$_myname
"
]
;
then
_err
"can not find my user name"
return
1
fi
_debug
"_lesh"
"
$_lesh
"
_info
"To install scheduler task in your Windows account, you must input your windows password."
_info
"
$PROJECT_NAME
doesn't save your password."
_info
"Please input your Windows password for:
$(
__green
"
$_myname
"
)
"
_password
=
"
$(
__read_password
)
"
#SCHTASKS.exe '/create' '/SC' 'DAILY' '/TN' "$_WINDOWS_SCHEDULER_NAME" '/F' '/ST' "00:$_randomminute" '/RU' "$_myname" '/RP' "$_password" '/TR' "$_winbash -l -c '$_lesh --cron --home \"$LE_WORKING_DIR\" $_centry'" >/dev/null
echo
SCHTASKS.exe
'/create'
'/SC'
'DAILY'
'/TN'
"
$_WINDOWS_SCHEDULER_NAME
"
'/F'
'/ST'
"00:
$_randomminute
"
'/RU'
"
$_myname
"
'/RP'
"
$_password
"
'/TR'
"
\"
$_winbash
-l -c '
$_lesh
--cron --home
\"
$LE_WORKING_DIR
\"
$_centry
'
\"
"
| cmd.exe
>
/dev/null
echo
}
_uninstall_win_taskscheduler
()
{
if
!
_exists schtasks
;
then
_err
"schtasks.exe is not found, are you on Windows?"
return
1
fi
if
!
echo
SCHTASKS /query /tn
"
$_WINDOWS_SCHEDULER_NAME
"
| cmd.exe
>
/dev/null
;
then
_debug
"scheduler
$_WINDOWS_SCHEDULER_NAME
is not found."
else
_info
"Removing
$_WINDOWS_SCHEDULER_NAME
"
echo
SCHTASKS /delete /f /tn
"
$_WINDOWS_SCHEDULER_NAME
"
| cmd.exe
>
/dev/null
fi
}
#confighome
installcronjob
()
{
_c_home
=
"
$1
"
_initpath
_CRONTAB
=
"crontab"
if
[
-f
"
$LE_WORKING_DIR
/
$PROJECT_ENTRY
"
]
;
then
lesh
=
"
\"
$LE_WORKING_DIR
\"
/
$PROJECT_ENTRY
"
else
_err
"Can not install cronjob,
$PROJECT_ENTRY
not found."
return
1
fi
if
[
"
$_c_home
"
]
;
then
_c_entry
=
"--config-home
\"
$_c_home
\"
"
fi
_t
=
$(
_time
)
random_minute
=
$(
_math
$_t
% 60
)
if
!
_exists
"
$_CRONTAB
"
&&
_exists
"fcrontab"
;
then
_CRONTAB
=
"fcrontab"
fi
if
!
_exists
"
$_CRONTAB
"
;
then
if
_exists cygpath
&&
_exists schtasks.exe
;
then
_info
"It seems you are on Windows, let's install Windows scheduler task."
if
_install_win_taskscheduler
"
$lesh
"
"
$_c_entry
"
"
$random_minute
"
;
then
_info
"Install Windows scheduler task success."
return
0
else
_err
"Install Windows scheduler task failed."
return
1
fi
fi
_err
"crontab/fcrontab doesn't exist, so, we can not install cron jobs."
_err
"All your certs will not be renewed automatically."
_err
"You must add your own cron job to call '
$PROJECT_ENTRY
--cron' everyday."
return
1
fi
_info
"Installing cron job"
if
!
$_CRONTAB
-l
|
grep
"
$PROJECT_ENTRY
--cron"
;
then
if
[
-f
"
$LE_WORKING_DIR
/
$PROJECT_ENTRY
"
]
;
then
lesh
=
"
\"
$LE_WORKING_DIR
\"
/
$PROJECT_ENTRY
"
else
_err
"Can not install cronjob,
$PROJECT_ENTRY
not found."
return
1
fi
if
[
"
$_c_home
"
]
;
then
_c_entry
=
"--config-home
\"
$_c_home
\"
"
fi
_t
=
$(
_time
)
random_minute
=
$(
_math
$_t
% 60
)
if
_exists
uname
&&
uname
-a
|
grep
SunOS
>
/dev/null
;
then
$_CRONTAB
-l
|
{
cat
...
...
@@ -4979,6 +5055,16 @@ uninstallcronjob() {
fi
if
!
_exists
"
$_CRONTAB
"
;
then
if
_exists cygpath
&&
_exists schtasks.exe
;
then
_info
"It seems you are on Windows, let's uninstall Windows scheduler task."
if
_uninstall_win_taskscheduler
;
then
_info
"Uninstall Windows scheduler task success."
return
0
else
_err
"Uninstall Windows scheduler task failed."
return
1
fi
fi
return
fi
_info
"Removing cron job"
...
...
@@ -5306,13 +5392,17 @@ _precheck() {
if
[
-z
"
$_nocron
"
]
;
then
if
!
_exists
"crontab"
&&
!
_exists
"fcrontab"
;
then
_err
"It is recommended to install crontab first. try to install 'cron, crontab, crontabs or vixie-cron'."
_err
"We need to set cron job to renew the certs automatically."
_err
"Otherwise, your certs will not be able to be renewed automatically."
if
[
-z
"
$FORCE
"
]
;
then
_err
"Please add '--force' and try install again to go without crontab."
_err
"./
$PROJECT_ENTRY
--install --force"
return
1
if
_exists cygpath
&&
_exists schtasks.exe
;
then
_info
"It seems you are on Windows, we will install Windows scheduler task."
else
_err
"It is recommended to install crontab first. try to install 'cron, crontab, crontabs or vixie-cron'."
_err
"We need to set cron job to renew the certs automatically."
_err
"Otherwise, your certs will not be able to be renewed automatically."
if
[
-z
"
$FORCE
"
]
;
then
_err
"Please add '--force' and try install again to go without crontab."
_err
"./
$PROJECT_ENTRY
--install --force"
return
1
fi
fi
fi
fi
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment