Cronjob doesn't run on Google Compute Engine - google-app-engine

I set up a cron job in a instance on Google Cloud's compute engine.
It is suppose to run at 7:47am every day. However each time I check if the file has been executed at 7:48 it does not work.
The code for the helloworld.sh file is here
echo "helloworld" + "$(date)" > helloworld.txt
I have set checked as root and set up the cron job as root still nothing. Any ideas?

The cron job is wrong because you need to use absolute paths in your command. Try:
/bin/bash /home/username/helloworld.sh

Related

Running Google App Engine as PHP Command Line?

I currently have a small Google App Engine project written in PHP. On a traditional web server, I would simply invoke this particular code via command line (e.g., php whatever.php). I'd like to set this up with cron.yaml to just run every hour or so without invoking a HTTP request if possible. How would you go about doing this?
You can do this by adding a handler url that points to your script as follows:
In your app.yaml it would look like this:
handlers:
- url: /mycron
script: cron.php
login: admin
The login parameter will only allow execution of the endpoint by Google system accounts or something like that so you enpoint won't be publicly accessible.
More information in the below link
ref: https://cloud.google.com/appengine/docs/standard/php/config/cron#securing_urls_for_cron
In order to schedule tasks using the cron.yaml file, otherwise known as cron jobs, you can use the following structure inside the file:
cron:
- description: "running my PHP code"
url: /your-app-url
target: your-service
schedule: every 60 minutes
You can edit the different cron fields to your convenience by following this syntax.
Place the cron.yaml file on the same directory as your app.yaml file (your application's root directory) and, before deploying, test it by going to http://localhost:8080/cron. If it works, you can deploy the application with the cron job by running this command:
gcloud app deploy cron.yaml
You can find additional information about cron jobs, such as how to retry failing cron jobs and securing or deleting them by following this link.

Request_logs on Google App Engine - append erases for new version?

I set up a cron job to download the logs using the following code:
echo [password] | appcfg.py request_logs --num_days=1 --severity=0 --append --passin --email=[user] --quiet /tmp/code/ ~/site_logs/`date +%m-%d-%y`.txt
I run it every 5 minutes, which is great for having the latest logs available to grep through. However, if I bump the version number, the log doesn't seem to honor append. It just writes over the file.
Am I missing something? Is there a better way to get this to continuously dump the logs to disk?
If you're still having this problem, you could expose a minimal API to expose the current version id and query that before fetching. It's hacky but it works.
The currently serving version ID can be retrieved using os.environ['CURRENT_VERSION_ID']. See: https://developers.google.com/appengine/docs/python/runtime

Google App Engine appcfg.py shows the help message for every command

I have GWT app, which is deployed on GAE (Java). I'm trying to download data from App Engine datastore using appcfg.py . I did all the setup according to http://ikaisays.com/2010/06/10/using-the-bulkloader-with-java-app-engine/ .
GAE Python SDK version is 1.4.3
Python version is 2.5.4
appcfg.py is on my PATH. When I run appcfg.py on the command-line, I get the "help" message. But the problem is that no matter which command I use, it always returns the help message. I have not been able to run any command using appcfg.py.
It doesn't give any specific error message no matter what arguments I give. My app is using Google Accounts authentication, but I don't think it even gets to the point of authentication.
I'm able to use the Java appcfg (for other actions like rollback) without any problem. But the Python version simply refuses to work for all commands.
I've tried different formats like:
appcfg.py create_bulkloader_config --url=http://myappid.appspot.com/remote_api --application=myappid --filename=config.yml
appcfg.py create_bulkloader_config --filename=bulkloader.yaml --url=http://myappid.appspot.com/remote_api
appcfg.py --filename=bulkloader.yaml --url=http://myappid.appspot.com/remote_api create_bulkloader_config
All give me the same help message:
Usage: appcfg.py [options]
Action must be one of:
create_bulkloader_config: Create a bulkloader.yaml from a running application.
cron_info: Display information about cron jobs.
download_app: Download a previously-uploaded app.
download_data: Download entities from datastore.
help: Print help for a specific action.
request_logs: Write request logs in Apache common log format.
rollback: Rollback an in-progress update.
set_default_version: Set the default (serving) version.
update: Create or update an app version.
update_cron: Update application cron definitions.
update_dos: Update application dos definitions.
update_indexes: Update application indexes.
update_queues: Update application task queue definitions.
upload_data: Upload data records to datastore.
vacuum_indexes: Delete unused indexes from application.
Use 'help <action>' for a detailed description.
Options:
-h, --help Show the help message and exit.
-q, --quiet Print errors only.
-v, --verbose Print info level logs.
--noisy Print all logs.
-s SERVER, --server=SERVER
...
...
...
Even when I try "appcfg.py help create_bulkloader_config" for a detailed description, it still shows me the same standard help.
I have also tried on the local development server using the url http://127.0.0.1:8888/remote_api but it still gives the same help message.
I'm totally clueless as to what the problem is. I'm new to GWT and GAE, and any help will be appreciated.
Thanks.
The following fix worked for me. It looks like appcfg.py doesn't like PYTHON27 and ALWAYS returns the help menu. I fixed it by executing it with PYTHON25 and hard coded all my file locations:
C:\Python25-archive\python "C:\Program Files (x86)\Google\google_appengine\appcfg.py" rollback C:\scripts\myapp
The right way is to change the environment variables on Windows 7:
Go to System Properties
Go to Advance System Settings
Click on Environment Variables
Append to Path variable the values C:\Python27\
Click Ok and restart your computer. (Yes, it is needed.)
Another way is to:
Open command Prompt
Locate your python.exe file. For example:
C:\Python27>_
Then, run a python command that looks like this.
python <appcfg_directory> download_app -A <your_app_id> -V <your_app_version> <output-dir>
Where <appcfg_directory> is equal to C:\Program Files\Google\google_appengine\appcfg.py. (Depending on your file location)
Don't forget to put quotes before and after <appcfg_directory>

execute cron with shell using cake php

currently I am using command to execute cron is
cd appfolder.
../cake/console/cake cronname
it is working on local linux server
but,
(1)
/home/chpltv/public_html/cron/cron/cake/console/cake -app "/home/chpltv/public_html/cron/cron/app" news_import_basic >> /home/chpltv/public_html/cron/a.txt
(2) sh ../home/chpltv/boxyourtvtrial.com/cake/console/cake.php -app "/home/chpltv/boxyourtvtrial.com/public_html/cron/cron/app/" news_import_basic >> /home/chpltv/public_html/cron/a.txt
it is not working.
I dont know wht is issue......
Please Help me
please tell me command to run cron in cake php
A shell is run from the app/vendors/shells directory within the application you have created. When you create the shell, if must also follow the same class structure as the other class based code in cake:
class ThisNewNameShell extends Shell {
// functions here
}
Then this shell is called run with the following command:
/path/to/cake/console/cake {name_of_shell} {name_of_function} {args} -app /path/to/app
If you still are not getting the desired results, turn on debugging and run the shell manually to see the output and fix any issues. Once they are resolved, you will have a working cron.
Happy Coding!
Without any error messages, it's hard to diagnose a problem.
Check your email or cron logs (possibly /var/log/cron) for error messages, they may help.
Check the permissions on your files to ensure the cron user can run the cake console etc.
Assuming you have php cli working fine (should be ok if you can run it manually on the same server), is it in the path when the cron executes?
Consider appending 2>/tmp/news_import_basic.err to the cron commands to capture any error messages to a log file.

Google App Engine: appcfg.py rollback

I'm using Windows 7 and for the life of me I cannot figure out how to call the rollback function on appcfg.py. All I want to know is what to type into the command prompt so I can rollback my app.
Try this: appcfg.py rollback <directory>
If your application myapp resides in C:\Users\Nilesh\Documents\ then directory path should be C:\Users\Nilesh\Documents\myapp
If you installed Google App Engine Launcher in your system, then installation path should be something like this C:\Program Files\Google\google_appengine
Now open the command prompt and type the following:
C:\Program Files\Google\google_appengine>appcfg.py rollback C:\Users\Nilesh\Documents\myapp
This will solve your issue. :)
The rollback command can rollback a transaction on the server, but you are unlikely to need to use that unless an update of your app failed for some reason. You should be getting some feedback from appcfg.py that such an action is required. Is that what you want to do? If so, just open a command prompt and type appcfg.py rollback.
Otherwise, please let us know what you are trying to accomplish by performing a 'rollback'.
E:\eclipse-jee-indigo-win32\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.6.1.v201201120043r37\appengine-java-sdk-1.6.1\bin>appcfg.cmd rollback E:\AdminApp\Admin\war
For Rollback Java Application
try this :
this was how I did it (all from the command line) which is a slightly simpler
method, which achieved the same effect.....
C:\Documents and Settings\Amit\My Documents\newproject>"C:\Program
Files\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.2.5.v200909021031\appengine-java-sdk-1.2.5\bin\appcfg" rollback war
Reading application configuration data...
2009-09-17 20:47:35.859::INFO: Logging to STDERR via org.mortbay.log.StdErrLog
Beginning server interaction for idebanet...
0% Rolling back the update.
Success.
Cleaning up temporary files...
C:\Documents and Settings\Amit\My Documents\newproject>
If you use maven for deploying your app (with goal appengine:update), then you can also run maven with goal appengine:rollback. It solved the issue for me.
I couldn't get mine to work, until I did this:
C:\Program Files (x86)\Google\google_appengine>python appcfg.py rollback "C:\Pro
gram Files (x86)\Google\google_appengine\mirror-quickstart-python"
I had to add in the double quotes and "python" before the appcfg.py
Here is how I did this on my Linux machine (after many trials and errors):
cd ~/.eclipse/org.eclipse.platform_3.5.0_155965261/plugins/com.google.appengine.eclipse.sdkbundle_1.5.1.r35v201106211634/appengine-java-sdk-1.5.1/bin
chmod +x appcfg.sh
./appcfg.sh -s appengine.google.com -e [my-email]#gmail.com rollback /home/erelsgl/workspace/ImitatorGWT/war
Hope this helps.
10, I had this problem little while ago and I have resolved it.
First, I moved to bin directory using:
cd ~/.eclipse/org.eclipse.platform_3.5.0_155965261/plugins/com.google.appengine.eclipse.sdkbundle_1.5.1.r35v201106211634/appengine-java-sdk-1.5.1/bin
Then, I ran the rollback command:
./appcfg.sh rollback /home/workspace/vchat/war
I hope this will help.
Here I have fix it on my ubuntu machine:
cd /home/eclipse/plugins/com.google.appengine.eclipse.sdkbundle_1.6.5/appengine-java-sdk-1.6.5/bin/
sh ./appcfg.sh -A appId -s appengine.google.com -e youdID#google.com rollback /home/workspace/projectName/war
Hope this helps
For all those who deploy using Google App Engine Launcher, you can fix the issue by opening command prompt and python appcfg.py rollback <directory of your application>
In my case, I have not set up Python env variable so:
C:\Python25\python C:\Program Files\Google\Google App Engine\appcfg.py rollback C:\eclipse\applicatoin
In Linux uploading an App through appcfg creates a staging directory in /tmp
0% Created staging directory at: '/tmp/appcfg8593320566371318406.tmp'
To rollback you may also this directory in rollback command
appcfg.sh -A yourAppId -s appengine.google.com rollback /tmp/appcfg8593320566371318406.tmp
After experiencing quite a it of frustration trying to 'appcfg rollback' on my Mac, I read Jaky's answer and resolved the problem in a couple of minutes by changing the version number.
If you're using eclipse, just open the appengine-web.xml under war>WEB-INF in the project & change the version number there.
Very late to the game, but I'd like to add what worked for me in Windows XP. In a command prompt:
C:\Python27>python C:\Progra~1\Google\google_appengine\appcfg.py rollback C:\Docume~1\myname\MyDocu~1\Projects\myproject\
Python 2.7 and the short names in the Windows path were key.
I am using 64 bit Windows7 with GAE-Java Typing all this detail at the command prompt can be frustrating. My solution: create a batch file.
I created a batch file named 'rollback.bat' & saved it in my WORKSPACE directory. The contents look like this:
cd C:\Users\Organize4Joy\My Code\EclipseWORKSPACE\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.8.3\appengine-java-sdk-1.8.3\bin\appcfg.cmd rollback C:\Users\Organize4Joy\EclipseWORKSPACE\iTreewareMAIN\war
run the batch file by simply typing "rollback"
this local utility changes directory, runs the appcfg rollback EXE & points it to my war directory.
Even better would be to establish a common utility(bin) directory and add it to my path variable. That way I can run this utility from anywhere.
Traverse to the path where the appcfg.py is placed
Run the Command python appcfg.py rollback (The Directory of your project folder)
Open dos
place yourself in the folder containing appcfg.cmd (bin of the GAE SDK)
If your application myapp resides in C:\Users\Nilesh\Documents\ then directory path should be C:\Users\Nilesh\Documents\myapp\war.
Now open the command prompt and type the following:
appcfg.cmd rollback C:\Users\Nilesh\Documents\myapp\war
Note don't forget to add 'war' at then end of your app folder
then enter your email and password
This has been answered many times, but I had issues getting it to work for me too. If you are running Java and are also having problems or if you have Google's 2 factor authentication setup and that is giving you problems, here are the steps I used to make it succeed:
1) Make sure you have the Google App Engine in your Path in Environment variables.
IE: C:\Users\yourUserName\Desktop\Eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.9.18\appengine-java-sdk-1.9.18\bin
2) Open up a command window AS AN ADMINISTRATOR! Do not just type cmd and enter, you need to type cmd, right-click on it, and open as admin
3) First, CD to the folder that has the WAR file in it. In my case, that was:
cd "C:\Users\yourUserName\Documents\MyWorkspace\Project1"
This is the same folder that has the src, .settings, and war folders in it.
4) In the cmd window, type: "appcfg rollback war" and press enter.
5) It will ask for your google credentials. If you do not have 2 factor authentication setup, simply type them in and press enter and you will be set.
6) If you DO have 2 factor authentication setup, go to your google accounts page (Just google for 'google account') and it will be the first or second one.
Next, under the "Signing In" category, go to App passwords.
Next, go to the bottom and under the select app dropdown menu, choose other and type in anything (IE: GAE rollback)
It will give you a password (16 digit random numbers).
Finally, type in your email address in the command window and then type/ paste in this new temporary 16 digit password into the password section.
7) Profit!
-Sil
In my case, I had to use the --no_cookies, without it, I had no premissions to do the operation.
C:\Users\user_name.gradle\appengine-sdk\appengine-java-sdk-1.9.30\bin\appcfg --no_cookies --application=app_name --version=1 rollback C:\projects\android\app\backend\build\exploded-app
I don't know much about these coding things everyone is talking about here..but I found a simple way to update the application..
Select your application and click on "EDIT".
A wordpad file should open up with application details.
Below the application there is version:1
Simply change the version to version:2 instead of 1 and click "Save".
So, instead of updating the same version..you are deploying a new version..
Click on "DEPLOY".
Check your application now!

Resources